From 89d3a8523838e883d125cfc659f4da6d3ccaa21a Mon Sep 17 00:00:00 2001 From: yuanguangxin <274841922@qq.com> Date: Sat, 29 Feb 2020 15:45:09 +0800 Subject: [PATCH] add q56 --- .idea/workspace.xml | 36 ++++++++++-------- README.md | 6 ++- Rocket.md | 4 +- .../q56_合并区间/Solution.java | 37 +++++++++++++++++++ 4 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 src/区间合并/q56_合并区间/Solution.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9b0c692..3ab00d5 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,11 +2,10 @@ - - - - + + + @@ -280,7 +279,7 @@ - + 1580045439607 @@ -569,7 +568,14 @@ - @@ -622,7 +628,6 @@ - @@ -647,7 +652,8 @@ - @@ -662,10 +668,10 @@ - + - + @@ -712,14 +718,14 @@ - + - - + + - + diff --git a/README.md b/README.md index a90dfaf..2119c07 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ ### 链表操作 * [q2_两数相加](/src/链表操作/q2_两数相加) -* [q206_反转链表](/src/链表操作/q206_反转链表) * [q138_复制带随机指针的链表](/src/链表操作/q138_复制带随机指针的链表) +* [q206_反转链表](/src/链表操作/q206_反转链表) ### 双指针遍历/滑动窗口 @@ -53,6 +53,10 @@ * [q20_有效的括号](/src/栈操作/q20_有效的括号) * [q224_基本计算器](/src/栈操作/q224_基本计算器) +### 区间合并 + +* [q56_合并区间](/src/区间合并/q56_合并区间) + ### 递归 * [q21_合并两个有序链表](/src/递归/q21_合并两个有序链表) diff --git a/Rocket.md b/Rocket.md index 3811c98..be49abf 100644 --- a/Rocket.md +++ b/Rocket.md @@ -38,7 +38,7 @@ ZAB协议包括两种基本的模式:崩溃恢复和消息广播。当整个 Z 1. String字符串:字符串类型是 Redis 最基础的数据结构,首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,我们常使用的 set key value 命令就是字符串。常用在缓存、计数、共享Session、限速等。 2. Hash哈希:在Redis中,哈希类型是指键值本身又是一个键值对结构,哈希可以用来存放用户信息,比如实现购物车。 3. List列表(双向链表):列表(list)类型是用来存储多个有序的字符串。可以做简单的消息队列的功能。 -4. Set集合:集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一 样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过 索引下标获取元素。利用 Set 的交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。 +4. Set集合:集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一 样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。利用 Set 的交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。 5. Sorted Set有序集合(跳表实现):Sorted Set 多了一个权重参数 Score,集合中的元素能够按 Score 进行排列。可以做排行榜应用,取 TOP N 操作。 ### Redis 的数据过期策略 @@ -507,7 +507,7 @@ Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers ### 进程的组成部分 -进程由进程控制块、程序段、数据段三部分组成。 +进程由进程控制块(PCB)、程序段、数据段三部分组成。 ### 进程的通信方式 diff --git a/src/区间合并/q56_合并区间/Solution.java b/src/区间合并/q56_合并区间/Solution.java new file mode 100644 index 0000000..664c373 --- /dev/null +++ b/src/区间合并/q56_合并区间/Solution.java @@ -0,0 +1,37 @@ +package 区间合并.q56_合并区间; + + +import java.util.*; + +/** + * 先根据start进行排序之后merge o(n*log(n)) + */ +class Solution { + public int[][] merge(int[][] intervals) { + if(intervals.length <= 1){ + return intervals; + } + + Arrays.sort(intervals, Comparator.comparingInt(arr -> arr[0])); + + int[] currInterval = intervals[0]; + List resArr = new ArrayList<>(); + resArr.add(currInterval); + + for(int[] interval: intervals){ + int currEnd = currInterval[1]; + + int nextBegin = interval[0]; + int nextEnd = interval[1]; + + if(currEnd >= nextBegin){ + currInterval[1] = Math.max(currEnd, nextEnd); + } else{ + currInterval = interval; + resArr.add(currInterval); + } + } + + return resArr.toArray(new int[resArr.size()][]); + } +}