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

news2024/11/15 18:18:56

题目

在这里插入图片描述
题目链接:
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;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Facebook广告如何开户以及投放费用?

Facebook作为全球最大的社交媒体平台之一&#xff0c;成为了企业与个人推广品牌、产品或服务的重要渠道。其精准的广告定向功能和庞大的用户基数&#xff0c;为广告主提供了无限的商机。云衔科技为企业提供专业的Facebook上开户和运营服务&#xff0c;助力您高效获客。 一、Fa…

5.26牛客循环结构

1002. 难点&#xff1a; 两层循环条件设置 思路 可以设置三个变量 代码 1003 思路&#xff1a; 与星号双塔差不多&#xff0c;在此基础上加大一点难度 每日练题5.23 &#xff08;EOF用法&#xff09;-CSDN博客 代码 1004 代码

MySQL事务篇1:事物的四大特性(ACID)、三类数据读取问题与隔离级别

一、什么是事务&#xff1f; MySQL的事务&#xff08;Transaction&#xff09;是一组由数据库管理系统&#xff08;DBMS&#xff09;执行的一个或多个SQL语句的集合&#xff0c;这些SQL语句作为一个单独的工作单元执行。事务的主要目的是确保数据库的一致性和完整性&#xff0c…

归并排序算法(经典、常见)

今天我们不刷力扣了&#xff0c;我们来复习&#xff08;手撕&#xff09;一下数据结构中的八大排序算法之一&#xff0c;归并排序 基本概念&#xff1a; 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&am…

【LLM多模态】多模态LLM在图表处理的应用

note 在真实场景下&#xff0c;我们进行测试&#xff0c;多模态大模型在处理显著文本时表现尚可&#xff0c;但在处理细粒度文本时往往效果并不太好&#xff0c;why? ​具体原因如下&#xff1a; 首先&#xff0c;视觉编码器的分辨率对于多模态大模型的性能影响较大&#x…

空间注意力机制

第一步是沿着通道维度进行最大池化和平均池化&#xff0c;比如下面3*3的特征图&#xff0c;有3个通道。 第二步新特征图进行拼接并经过卷积调整通道数 第三步经过Sigmoid函数后乘到输入上 代码&#xff1a; class SpatialAttention(layers.Layer):def __init__(self):super(S…

Android 动效整理

Android自定义SeekBar&#xff0c;滑动时弹出气泡指示器显示进度 安卓开发中非常炫的效果集合_android 开发 向右上角收起炫酷动态效果-CSDN博客 https://github.com/shenghuntianlang/Android-Views?tabreadme-ov-file#decentbanner 以前收藏了很多文章&#xff0c;但是过…

JavaWeb_Web——Maven

介绍&#xff1a; Maven是Apache公司发行的&#xff0c;一个Java项目管理和构建工具 作用&#xff1a; 1.方便的依赖管理 2.统一的项目结构 3.标准的项目构建流程 模型&#xff1a; Maven通过项目对象模型(POM)和依赖管理模型(Dependency)管理依赖(jar包)&#xff0c;如果新添…

Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)

Search your data 这里有两个比较有用的参数需要注意一下 Search timeout&#xff1a;设置每个分片的搜索超时时间。从集群级别可以通过 search.default_search_timeout 来设置超时时间。如果在 search.default_search_timeout 设置的时间段内未完成搜索请求&#xff0c;就会…

MySQL大表删除方案

1.问题 在生产环境中&#xff0c;执行大表删除操作时&#xff0c;很容易因为占用了大量io资源导致其他事务被阻塞&#xff0c;最终事务不断堆积导致MySQL挂掉。 2.drop命令 drop命令&#xff0c;MySQL主要干了两件事&#xff1a; 清除buffer pool缓冲&#xff08;内存&…

入门五(项目介绍及登录和发布需求)

软件缺陷判定标准 项目中缺陷的管理流程 使用Excel对于缺陷进行管理 使用工具管理缺陷 一、项目背景 传智作为一个IT教育机构&#xff0c;拥有自己开发且实际运营的产品&#xff1b; 将开发和运营的技术作为授课的内容&#xff0c;对于学员而言学到的都是一手的真实案例和…

【开源】2024最新python豆瓣电影数据爬虫+可视化分析项目

项目介绍 【开源】项目基于pythonpandasflaskmysql等技术实现豆瓣电影数据获取及可视化分析展示&#xff0c;觉得有用的朋友可以来个一键三连&#xff0c;感谢&#xff01;&#xff01;&#xff01; 项目演示 【开源】2024最新python豆瓣电影数据爬虫可视化分析项目 项目截图…

02.并发编程基础概念

在正式学习 Java 的并发编程之前&#xff0c;我们需要熟悉和学习几个并发编程的基础概念。 1 进程和线程 1.1 进程 我们常说的是应用程序&#xff0c;也就是 app&#xff0c;由指令和数据组成。但是当我们不运行一个具体的 app 时&#xff0c;这些应用程序就是放在磁盘(也包括…

基于Arduino IDE的ESP32开发环境搭建

文章目录 一. Arduino IDE安装二. Arduino IDE安装ESP开发包 一. Arduino IDE安装 Arduino官网下载IDE软件 解压下载好的安装包&#xff0c;以管理员身份运行Arduino IDE软件 IDE第一次启动会安装各种驱动&#xff0c;直接点击确定就行 二. Arduino IDE安装ESP开发包 将…

深入探索C++ Vector容器:灵活的动态数组秘籍

目录 ​编辑 引言 一、初识vector&#xff1a;构造与初始化 二、动态管理&#xff1a;添加与删除元素 三、访问与遍历&#xff1a;多种方式直达元素 四、容量与大小&#xff1a;动态调整的艺术 五、进阶技巧&#xff1a;高效运用vector 结语 引言 在C编程的世界里&…

【Python特征工程系列】一文教你使用PCA进行特征分析与降维(案例+源码)

这是我的第287篇原创文章。 一、引言 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的降维技术&#xff0c;它通过线性变换将原始特征转换为一组线性不相关的新特征&#xff0c;称为主成分&#xff0c;以便更好地表达数据的方差。 在特征重要…

Day23:Leetcode:530.二叉搜索树的最小绝对差 + 501.二叉搜索树中的众数 + 236. 二叉树的最近公共祖先

LeetCode&#xff1a;530.二叉搜索树的最小绝对差 问题描述 解决方案&#xff1a; 1.思路 中序遍历 2.代码实现 class Solution {int pre;int ans;public int getMinimumDifference(TreeNode root) {ans Integer.MAX_VALUE;pre -1;dfs(root);return ans;}public void d…

生成式AI导论2024-李宏毅

生成式AI导论2024-李宏毅 第0讲&#xff1a; 课程说明第1讲&#xff1a;生成式AI是什么第2講&#xff1a;今日的生成式人工智慧厲害在哪裡&#xff1f;從「工具」變為「工具人」 第0讲&#xff1a; 课程说明 生成式AI的入门课程 第1讲&#xff1a;生成式AI是什么 生成式人…

VMware创建虚拟机

1.自定义 2.选择硬件兼容性 3.创建一个空白硬盘 4.选择操作系统和版本 5.设置虚拟机名称以及安装位置 6.处理器配置 7.设置虚拟机内存 8.设置网络类型 8.选择IO控制器 9.选择磁盘类型 10.创建一个新硬盘 11.设置磁盘容量以及磁盘个数 12.设置磁盘文件名称(默认) 13.点击完成创建…

LabVIEW直方图应用解析

概述 在LabVIEW中&#xff0c;直方图是一种重要的工具&#xff0c;用于分析和展示数据的分布情况。它通过将数据分成若干区间并绘制对应频数&#xff0c;可以帮助用户了解数据的集中趋势、离散程度和分布形态。本文将详细介绍LabVIEW中直方图的使用方法、适用场合、实际意义及…