牛客NC222 插入区间【中等 数组,区间合并问题 Java/Go/PHP/C++】lintcode30 插入区间

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/1d784b5472ab4dde88ea2331d16ee909
https://www.lintcode.com/problem/30/solution/56586

思路

在这里插入图片描述

Java代码

import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 *   public Interval(int start, int end) {
 *     this.start = start;
 *     this.end = end;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param Intervals Interval类一维数组 
     * @param newInterval Interval类 
     * @return Interval类一维数组
     */
    public Interval[] insertInterval (Interval[] arr, Interval obj) {
        //这种题,直接看答案,梳理思路就行,多练就会了
            //https://blog.csdn.net/bao_14440/article/details/132548294
          int i=0;
          List<Interval> merged = new ArrayList<>();
          //添加区间最大值小于newInterval的开始位置
            while (i<arr.length && arr[i].end<obj.start ){
                merged.add(arr[i]);
                i++;
            }

            //合并区间
            while (i<arr.length && arr[i].start <=obj.end){
                obj.start=Math.min(arr[i].start,obj.start);
                obj.end = Math.max(arr[i].end,obj.end);
                i++;
            }

            merged.add(obj);
            //添加剩下的区间到merged列表中
            while (i<arr.length){
                merged.add(arr[i]);
                i++;
            }

            return merged.toArray(new Interval[merged.size()]);
    }
}

Go代码

package main

import . "nc_tools"

/*
 * type Interval struct {
 *   Start int
 *   End int
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param Intervals Interval类一维数组
 * @param newInterval Interval类
 * @return Interval类一维数组
 */
func insertInterval(Intervals []*Interval, newInterval *Interval) []*Interval {
	//这种题,直接看答案,梳理思路就行,多练就会了
	//https://blog.csdn.net/bao_14440/article/details/132548294
	merged := []*Interval{}

	idx := 0

	//找到插入区间的起始位置,最大值要小于newInterval的开始位置
	for idx < len(Intervals) && Intervals[idx].End < newInterval.Start {
		merged = append(merged, Intervals[idx])
		idx++
	}

	//合并区间
	for idx < len(Intervals) && Intervals[idx].Start <= newInterval.End {
		curstart := newInterval.Start
		curend := newInterval.End
		if Intervals[idx].Start < curstart {
			newInterval.Start = Intervals[idx].Start
		}

		if Intervals[idx].End > curend {
			newInterval.End = Intervals[idx].End
		}

		idx++
	}

	merged = append(merged, newInterval)
	//继续添加后面的区间
	for idx < len(Intervals) {
		merged = append(merged, Intervals[idx])
		idx++
	}

	return merged
}

PHP代码

<?php

/*class Interval{
    var $start = 0;
    var $end = 0;
    function __construct($a, $b){
        $this->start = $a;
        $this->end = $b;
    }
}*/

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param Intervals Interval类一维数组 
 * @param newInterval Interval类 
 * @return Interval类一维数组
 */
function insertInterval( $Intervals ,  $newInterval )
{
    //这种题,直接看答案,梳理思路就行,多练就会了
    //https://blog.csdn.net/bao_14440/article/details/132548294
    $merged = [];

    $idx =0;
    //找到插入位置起点,起点前面的最大值要小于$newInterval的start
    while ($idx < count($Intervals) && $Intervals[$idx]->end < $newInterval->start) {
        $merged[count($merged)] = $Intervals[$idx];
        $idx++;
    }

    //合并区间
    while ($idx<count($Intervals) && $Intervals[$idx]->start <= $newInterval->end){
        $curstart = $newInterval->start;
        $curend = $newInterval->end;

        if($curstart > $Intervals[$idx]->start){
            $newInterval->start = $Intervals[$idx]->start;
        }

        if($curend < $Intervals[$idx]->end){
            $newInterval->end = $Intervals[$idx]->end;
        }
        $idx++;
    }

    $merged[count($merged)] = $newInterval;

    //继续添加剩下的区间到结果中
    while ($idx<count($Intervals)){
        $merged[count($merged)] = $Intervals[$idx];
        $idx++;
    }
    

    return $merged;
}

C++代码

/**
 * struct Interval {
 *  int start;
 *  int end;
 *  Interval(int s, int e) : start(start), end(e) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param Intervals Interval类vector
     * @param newInterval Interval类
     * @return Interval类vector
     */
    vector<Interval> insertInterval(vector<Interval>& Intervals,
                                    Interval newInterval) {
        //这种题,直接看答案,梳理思路就行,多练就会了
        //https://blog.csdn.net/bao_14440/article/details/132548294

        vector<Interval> merged;

        int i=0;
        //找到插入区间的位置,最大值要小于newInterval的start
        while (i<Intervals.size()&& Intervals[i].end< newInterval.start){

            merged.push_back(Intervals[i++]);
        }


        //合并区间
        while (i<Intervals.size() && Intervals[i].start<=newInterval.end){

            int curstart = newInterval.start;
            int curend = newInterval.end;

            if(curstart > Intervals[i].start){
                newInterval.start = Intervals[i].start;
            }

            if(curend < Intervals[i].end){
                newInterval.end = Intervals[i].end;
            }

            i++;
        }

        merged.push_back(newInterval);

        //继续添加后面的区间
        while (i<Intervals.size()){

            merged.push_back(Intervals[i++]);
        }

        return merged;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/647692.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具&#xff0c;⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上&#xff0c;同时收集结果。 1.并⾏执⾏测试⽤例&#xff1a;在不同的机器上并⾏执⾏测试⽤例&#xff0c;从⽽加速整个测试过…

详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)

目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时&#xff0c;附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;其中…

初识C语言——第二十四天

函数的基本使用和递归 1.函数是什么 2.库函数 3.自定义函数 4.函数参数 5.函数调用 6.函数的嵌套调用和链式访问 7.函数的声明和定义 函数是什么 C语言中函数的分类 1.库函数 2.自定义函数 库函数&#xff1a; 简单的总结,C语言常用的库函数都有&#xff1a; #includ…

QT之常用控件

一个图形化界面当然需要有各种各样的控件&#xff0c;QT也不例外&#xff0c;在QT designer中就有提供各种各样的控件&#xff0c;用以开发图形化界面。 而想使用好一个QT控件&#xff0c;就需要了解这些控件。 QWidget 在QT中&#xff0c;所有控件都继承自 QWidget 类&…

Docker学习(4):部署web项目

一、部署vue项目 在home目录下创建项目目录 将打包好的vue项目放入该目录下&#xff0c;dist是打包好的vue项目 在项目目录下&#xff0c;编辑default.conf 内容如下&#xff1a; server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {r…

24法考证件照要求|不合格原因汇总!

6月法考报名&#xff0c;大家一定要提前熟悉下电子证件照片要求‼️ ⚠️证件照注意事项 ▪️不得上传全身照、风景照、生活照、背带(吊带)衫照、艺术照、侧面照、不规则手机照等。 ▪️本人近三个月内彩色(红、蓝、白底色均可)正面免冠电子证件照片&#xff0c;照片必须清晰完…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

MySQL--执行计划

一、执行计划 1.介绍 执行计划是sql在执行时&#xff0c;优化器优化后&#xff0c;选择的cost最低的方案 通过desc、explain可以查看sql的执行计划 2.如何查看执行计划 table语句操作的表&#xff0c;在多表时才有意义type查找类型possible_keys可能会用到的索引key最终选择的…

python ofd转pdf及图片

本文部分内容参考&#xff0c;如有侵权请联系删除&#xff1a;使用 easyofd 解析ofd 文件_python模块easyofd如何使用-CSDN博客 背景需求&#xff1a;需要将邮箱中得ofd格式发票提取出来转换成pdf或者图片。 在网上搜了发现使用pyofd包&#xff0c;安装之后使用各种问题&…

VXLAN小结

1.VXLAN:(组件虚拟网络的架构核心)虚拟扩展本地局域网&#xff0c;通过隧道的形式&#xff0c;将物理上有隔离的资源&#xff0c;在逻辑上连通起来&#xff0c;使其二层互通。 a.物理网络:指的是构成 VXLAN 连接的基础 IP 网络 b.逻辑网络:指的是通过 VXLAN 构建的虚拟网络 C.N…

腾讯Java社招面试题真题,最新面试题

Java中synchronized和ReentrantLock有什么区别&#xff1f; 1、锁的实现方式不同&#xff1a; synchronized是JVM层面的锁&#xff0c;主要依赖于监视器对象&#xff08;monitor&#xff09;实现。ReentrantLock是JDK层面的锁&#xff0c;通过Java代码实现&#xff0c;提供了更…

docker 上面安装 Nginx 以及设置访问 IP 就可以访问前端工程

docker 运行 Nginx 第一步&#xff1a;搜索下镜像 首先可以使用 docker search nginx 搜索 nginx 服务 docker search nginx相关控制台输出&#xff1a; NAME DESCRIPTION STARS OFFICIAL…

[OC]深拷贝与浅拷贝

深拷贝与浅拷贝 深拷贝与浅拷贝 深拷贝与浅拷贝定义按照类型说明非容器类对象的深拷贝与浅拷贝不可变字符串可变类型字符串 容器类对象的深浅拷贝自定义类对象的深浅拷贝容器类对象的完全深拷贝1.copyItems2.解档和归档 定义 深拷贝&#xff1a;简单来说就是创建一个与被复制对…

虚拟化技术[2]之存储虚拟化

存储虚拟化 存储虚拟化简介存储虚拟化一般模型存储虚拟化实现方式基于主机存储虚拟化基于存储设备存储虚拟化基于网络存储虚拟化 案例分析&#xff1a;VMFSVMFS功能 存储虚拟化简介 存储虚拟化&#xff1a;将存储网络中的各个分散且异构的存储设备按照一定的策略映射成一个统一…

webpack5生产模式

生产模式 生产模式准备 开发模式和生产模式有不同的 配置文件 2修改webpack.prod.js文件修改webpack.dev.js文件 修改webpack.dev.js文件 1》修改输出路径为undefined 2》将绝对路径进行修改&#xff0c;进行回退 此时文件的执行命令为 修改webpack.prod.js文件 1》修改绝…

LangChain笔记

很好的LLM知识博客&#xff1a; https://lilianweng.github.io/posts/2023-06-23-agent/ LangChain的prompt hub: https://smith.langchain.com/hub 一. Q&A 1. Q&A os.environ["OPENAI_API_KEY"] “OpenAI的KEY” # 把openai-key放到环境变量里&…

【Linux】Linux的基本指令_2

文章目录 二、基本指令8. man9. nano 和 cat10. cp11. mv12. echo 和 > 和 >> 和 <13. more 和 less14. head 和 tail 和 | 未完待续 二、基本指令 8. man Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问…

深入编程逻辑:从分支到循环的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、编程逻辑的基石&#xff1a;分支与循环 分支逻辑详解 代码案例&#xff1a;判断整数是…

Unity 资源 之 限时免费的Lowpoly农场动物,等你来领!

Unity资源 之 Lowpoly farm animals 农村动物 前言资源包内容领取兑换码 前言 Unity 资源商店为大家带来了一份特别的惊喜——限时免费的农场动物资源&#xff01;这是一个充满趣味和实用性的资源包。 资源包内容 在这个资源包中&#xff0c;你可以找到丰富多样的低地养殖动物…

685. 冗余连接 II

685. 冗余连接 II 问题描述 在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。 输入一个有向图&#xff0c;该…