首页 > 其他分享 >合并区间

合并区间

时间:2024-06-11 16:11:00浏览次数:6  
标签:int 复杂度 interval 合并 len intervals result 区间

Problem: 56. 合并区间

目录

思路

bite数组与排序两种思路

解题方法

描述你的解题方法

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code1 这个写的有点不优美了 丑

func merge(intervals [][]int) [][]int {
	result := [][]int{}
	// false, 由于[[1,4],[5,6]]要求返回[[1,4],[5,6]]而不是[1,6], 故bool数组翻倍使用<<1
	boolArray := make([]bool, (10*10*10*10+1)<<1)
	// minNumber, maxNumber := math.MaxInt, math.MinInt
	// 将范围内的bool改成true
	for _, i := range intervals {
		// if i[0] < minNumber {
		// 	minNumber = i[0]
		// }
		// if i[0] > maxNumber {
		// 	maxNumber = i[0]
		// }
		for index := i[0]; index <= i[1]; index++ {
			// 如果是i[0], 就不需要与前面连接
			if index == i[0] {
				boolArray[index<<1] = true
			} else {
				boolArray[index<<1-1], boolArray[index<<1] = true, true
			}
		}
	}
	// 返回结果
	for i := 0; i < len(boolArray); i++ {
		// 当遇到true时
		if boolArray[i] {
			// 找到下一个i不为true的
			j := 1
			for boolArray[i+j] && j < len(boolArray)-i {
				j++
			}
			result = append(result, []int{i >> 1, (i + j - 1) >> 1})
			i = i + j - 1
		}
	}
	return result
}

Code2

func merge(intervals [][]int) [][]int {
	result := [][]int{}
	// 排序
	sort.Slice(intervals, func(i, j int) bool {
		return intervals[i][0] < intervals[j][0]
	})

	for _, interval := range intervals {
		// 第一次或者与前面的区间不重合
		if len(result) == 0 || interval[0] > result[len(result)-1][1] {
			result = append(result, interval)
		} else {
			if result[len(result)-1][1] < interval[1] {
				result[len(result)-1][1] = interval[1]
			}
		}
	}
	return result
}

标签:int,复杂度,interval,合并,len,intervals,result,区间
From: https://www.cnblogs.com/sunchenxuan/p/18242232

相关文章

  • 【区间dp】石子合并
    原题传送门题目描述在一个圆形操场的四周摆放\(N\)堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的\(2\)堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将\(N\)堆石子合并成\(1\)堆的最小得分和最大得分。输入格式数据的......
  • Python统计实战:两道题掌握一个总体均值、一个总体方差、两个总体均值差、两个总体方差
    为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。(以下练习题来源于《统计学—基于Python》。联系我获取完整数据和Python代码。) 求解参数(区间)估计的基本思路一看求总体的什么参数(总体......
  • 【习题】区间型动态规划
    区间型动态规划,即区间DP,主要用于解决涉及区间的问题。换句话说,这类DP问题总是从小的区间转移到大的区间,以区间为子问题。怎么做?例题\(1:\)P1775石子合并。观察题目,我们可以发现,不管前面的石子是怎么合并的,最终都是仅剩的两堆石子合并在一起。对于一段需要合并成一堆的石......
  • 计算机网络知识CIDR(无类别域区间路由)
    目录介绍基本信息优点与关联如何计算判定范围(你应该是来看这个的,前面是水字数的)省流版介绍无类别域间路由(ClasslessInter-DomainRouting、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。建议直接看第三个标题基本信......
  • Git:从配置到合并冲突
    目录        1.前言        2.Git的下载与初始化配置        3.Git中新建仓库        4.Git的工作区域和文件状态        5.Git中查看操作和提交记录        6.Git中添加和提交文件        7.Git中回退提交版......
  • 使用微分中值定理分析开区间时导数和函数的有界关系
    Step1:微分中值定理简介微分中值定理(MeanValueTheorem,MVT)表明,如果函数f(x)f(x)f(x)在闭区间[a,b][a,b][a,b]上连续,并且在开区间(a,b)(a,b)(a,b)上可导,那么存在一个点c∈(a,b)c\in(a,b)c∈(a,b)使得:f′(c)=f(b)−f(a)b−af'(c)=\frac{f(b)-f(a)}{b-a}f......
  • (nice!!!)LeetCode 312. 戳气球(区间dp ||记忆化dfs )
    312.戳气球思路:经典区间dp问题。方法一,区间dp。状态dp[i][j]表示:ij这个区间能获得的最大硬币数量。那么我们就可以枚举区间ij的每一个点,为该区间最后一个戳破的气球。细节看注释classSolution{public:intmaxCoins(vector<int>&nums){intn=nums.siz......
  • Video Cut Crop Join for Mac(mac视频剪辑合并软件 )v3.9版
    VideoCutCropJoinforMac是一款适用于Mac用户的视频编辑软件。这款软件具有强大的功能,可以帮助用户对视频进行精准的剪切、裁剪,并将其压缩为各种小尺寸和格式,非常适合在网站上分享。VideoCutCropJoinforMac(mac视频剪辑合并软件)软件地址VideoCutCropJoinforM......
  • 从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 【一百零九】【算法分析与设计】树状数组求解前缀最大值,673. 最长递增子序列的个数,
    树状数组求解前缀最大值树状数组可以求解和前缀区间有关的问题,例如前缀和,前缀区间最值.可以利用logn......