56合并区间 go解题

news2024/11/5 16:33:05

这里解法是直接找一个快排模板,然后排序了第一个数,所以需要多加一个判断逻辑并且稍微覆盖。

package main

import "fmt"

func main() {
	fmt.Println(merge([][]int{{0, 2}, {2, 3}, {4, 4}, {0, 1}, {5, 7}, {4, 5}, {0, 0}}))
	// fmt.Println(merge([][]int{{2, 3}, {4, 5}, {6, 7}, {8, 9}, {1, 10}}))
	// fmt.Println(merge([][]int{{1, 4}, {1, 5}, {0, 0}}))
}

func merge(intervals [][]int) [][]int {
	if len(intervals) == 0 {
		return intervals
	}
	quickSort(intervals, 0, len(intervals)-1)
	res := make([][]int, 0)
	res = append(res, intervals[0])
	tmpmax := 0 // 可能有包含关系
	for i := 1; i < len(intervals); i++ {
		//快排时没有处理第二位数字,会有1,5;1,4这种错误交换
		if intervals[i][0] == intervals[i-1][0] {
			tmpmax = max(intervals[i][1], intervals[i-1][1])
			// 并且暴力地把他们都用最大数覆盖了
			intervals[i][1], intervals[i-1][1] = tmpmax, tmpmax
			res[len(res)-1][1] = max(res[len(res)-1][1], tmpmax)
			continue
		}
		if intervals[i][0] <= intervals[i-1][1] || res[len(res)-1][1] >= intervals[i][1] || res[len(res)-1][1] >= intervals[i][0] {
			// 已经加入res的可能对后面独立区间有包含关系
			tmpmax = max(intervals[i][1], intervals[i-1][1])
			res[len(res)-1][1] = max(res[len(res)-1][1], tmpmax)
		} else {
			res = append(res, intervals[i])
		}
	}
	return res
}

func quickSort(nums [][]int, l, r int) { //[l,r]
	if l < r {
		m := partition(nums, l, r)
		quickSort(nums, l, m-1)
		quickSort(nums, m+1, r)
	}
}

func partition(nums [][]int, l int, r int) int {
	key := nums[r][0]
	i := l
	j := l
	for j < r {
		if nums[j][0] < key {
			nums[i][0], nums[j][0] = nums[j][0], nums[i][0]
			nums[i][1], nums[j][1] = nums[j][1], nums[i][1]
			i++
		}
		j++
	}
	nums[i][0], nums[r][0] = nums[r][0], nums[i][0]
	nums[i][1], nums[r][1] = nums[r][1], nums[i][1]
	return i
}

假如把第二个数一起排序了:

package main

import "fmt"

func main() {
	// fmt.Println(merge([][]int{{0, 2}, {2, 3}, {4, 4}, {0, 1}, {5, 7}, {4, 5}, {0, 0}}))
	// fmt.Println(merge([][]int{{2, 3}, {4, 5}, {6, 7}, {8, 9}, {1, 10}}))
	fmt.Println(merge([][]int{{1, 10}, {2, 3}, {4, 5}}))
}

func merge(intervals [][]int) [][]int {
	if len(intervals) == 0 {
		return intervals
	}
	quickSort(intervals, 0, len(intervals)-1)
	res := make([][]int, 0)
	res = append(res, intervals[0])
	tmpmax := 0 // 可能有包含关系
	for i := 1; i < len(intervals); i++ {
		// 如果上一个区间完全包含于res,最后一个res的可能对后面的“看似独立区间”有包含关系
		// {1,10},{2,3},{4,5} // {1,10},{2,3},{4,15}
		if intervals[i][0] <= intervals[i-1][1] || res[len(res)-1][1] >= intervals[i][1] || res[len(res)-1][1] >= intervals[i][0] {
			tmpmax = max(intervals[i][1], intervals[i-1][1])
			res[len(res)-1][1] = max(res[len(res)-1][1], tmpmax)
		} else {
			res = append(res, intervals[i])
		}
	}
	return res
}

func quickSort(nums [][]int, l, r int) { //[l,r]
	if l < r {
		m := partition(nums, l, r)
		quickSort(nums, l, m-1)
		quickSort(nums, m+1, r)
	}
}

func partition(nums [][]int, l int, r int) int {
	key := nums[r][0]
	i := l
	j := l
	for j < r {
		// 第一个数相同时,第二数也要小才是真的小
		if (nums[j][0] < key) || (nums[j][0] == key && nums[j][1] < nums[r][1]) {
			nums[i][0], nums[j][0] = nums[j][0], nums[i][0]
			nums[i][1], nums[j][1] = nums[j][1], nums[i][1]
			i++
		}
		j++
	}
	nums[i][0], nums[r][0] = nums[r][0], nums[i][0]
	nums[i][1], nums[r][1] = nums[r][1], nums[i][1]
	return i
}

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

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

相关文章

奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用

随着新能源汽车的发展&#xff0c;对仿真技术的要求也越来越高。那么奇瑞汽车利用降阶模型在新能源汽车热管理仿真上做了哪些应用呢&#xff1f;本次内容主要从四个方面展开介绍&#xff1a; 1、 奇瑞汽车简介&#xff1b; 2、 热管理降阶模型开发的背景&#xff1b; 3、 高低…

【NLP-06】词形还原(Lemmatization)深度解析与实践

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

卖三蹦子的wordpress模板

Tricycle三奔子wordpress模板 卖三轮的跨境电商B2B产品展示型网站wordpress模板&#xff0c;助力二大爷的三奔子卖向全球&#xff0c;让在中国遍地热销的三蹦子在海外也大卖. https://www.jianzhanpress.com/?p8178

Java | Leetcode题解之第535题TinyURL的加密与解密

题目&#xff1a; 题解&#xff1a; public class Codec {private Map<Integer, String> dataBase new HashMap<Integer, String>();private Random random new Random();public String encode(String longUrl) {int key;while (true) {key random.nextInt();i…

NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目

自 NFTScan Site 上线以来&#xff0c;它迅速成为 NFT 市场中的一支重要力量&#xff0c;凭借对各类 NFT 集合、市场以及 NFTfi 项目的认证获得了广泛认可。这个平台帮助许多项目提升了曝光度和可见性&#xff0c;为它们在竞争激烈的 NFT 市场中创造了更大的成功机会。 在最新更…

保研考研机试攻略:python笔记(2)

&#x1f428;&#x1f428;&#x1f428;宝子们好呀&#xff0c;今天我们继续来学习N诺提供的python笔记&#xff0c;fighting&#xff01;( •̀ ω •́ )✧ 对这个系列感兴趣的宝子欢迎关注保研考研机试攻略专栏哦 ~ 目录 &#x1f428;&#x1f428;&#x1f428;4进制转…

【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

【力扣专题栏】字母异词分组,如何利用强大的容器(unordered_map)解决该问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 2、算法原理解析 3、代码编写 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//创建哈希表unordered_map<string,vector<string&g…

vscode clangd for cuda 插件配置

这里写目录标题 1. 下载插件clangd,并且安装server到host2. 配置3. 安装调试插件 1. 下载插件clangd,并且安装server到host 步骤 extension下载 altshiftp, 下服务&#xff0c;如果下不下来请考虑用&#x1fa9c; 下载好后check一下&#xff0c;检查是否正常 正常的标志 注意…

Oracle 11g DataGuard GAP处理

1 说明 在Oracle Data Guard中&#xff0c;GAP是指在备库无法接收到一个或多个来自主库的归档日志文件时发生的情况&#xff0c;会导致数据保护和实时数据复制的能力受到影响。 Oracle Data Guard架构日志同步有三个阶段&#xff1a; 日志发送&#xff1b;日志接收&#xff…

2023年编程语言排行榜

随着编程语言的不断发展&#xff0c;跟踪哪些语言处于领先地位至关重要。在这两部分中&#xff0c;我们将深入研究 2023 年排名前 40 的编程语言&#xff0c;并分析它们脱颖而出的原因。 40 种顶级 TIOBE 编程语言 1. Python 受欢迎程度&#xff1a;非常高学习难度&#xff1…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

Verilog实现的莫尔斯电码发生器

莫尔斯或者摩尔斯电码(Morse Code)&#xff0c;发明于1837年(另有一说是1836年)&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff0c;在这里作一简单处理&#xff0c;仅产生点(Dit)和划(Dah)&#xff0c;时长在0.25秒之内为点&#xff0c;超过为划…

vue3 封装aixos

1. Vue3 封装 aixos 并且 使用 aixos 请求数据 npm install axios # 或者 yarn add axios 2. Vue3 封装 aixos 并且 使用 aixos 请求数据 封装 axios可以帮助我们更好地管理 HTTP 请求&#xff0c;例如添加统一的基础URL、请求头、拦截器等功能。 下面是封装 axios的一个示…

在美团外卖上抢券 Python来实现

在美团外卖上抢券的 Python 实现 在如今的互联网时代&#xff0c;自动化脚本已经成为了许多用户生活中不可或缺的工具。尤其是在购物、抢券等场景中&#xff0c;自动化脚本能够帮助我们节省大量的时间和精力。今天&#xff0c;我们将一起探索如何使用 Python 编写一个简单的脚…

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议&#xff08;CISSE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

即插即用显著位置注意力spab,涨点起飞

题目&#xff1a;Salient Positions based Attention Network for Image Classification 论文地址&#xff1a;https://arxiv.org/pdf/2106.04996 创新点 提出了基于显著位置的注意力机制&#xff1a;论文提出了一种名为SPAblock的显著位置选择算法(SPS)&#xff0c;通过在注…

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接&#xff1a;R语言贝叶斯&#xff1a;INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…