【LeetCode】数组系列(间隔)
来源:互联网 发布:剑三新建角色捏脸数据 编辑:程序博客网 时间:2024/05/22 01:32
56. Merge Intervals
题目:interval包含start和end,将重叠部分合并
思路:用start和end标记目前的最后一个,但不急着加到List里面,因为可能有变化,对List操作时间复杂度高。还需要注意对interval类型进行compare函数重写,或是使用匿名比较器。
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */public class Solution { public List<Interval> merge(List<Interval> intervals) { int len = intervals.size(); if(len < 2) return intervals; List<Interval> ret = new ArrayList<>(); intervals.sort((i1, i2) -> Integer.compare(i1.start, i2.start)); int start = intervals.get(0).start; int end = intervals.get(0).end; for(int i = 0; i < len; i++){ Interval in = intervals.get(i); if(end >= in.start){ end = Math.max(end, in.end); } else{ ret.add(new Interval(start, end)); start = in.start; end = in.end; } } ret.add(new Interval(start,end)); return ret; }}
Collections.sort(intervals, new Comparator<Interval>(){ @Override public int compare(Interval obj0, Interval obj1) { return obj0.start - obj1.start; } });
57. Insert Interval
题目:将一个Interval插入原有有序的Interval序列中,使其依然有序。
思路:在56题基础上进行了一些改进,先将所有end比插入start小的填入List中,然后比较出新的start和end,在按照同样的方法插入。
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */public class Solution { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { List<Interval> ret = new LinkedList<>(); int start = newInterval.start; int end = newInterval.end; int i = 0; while(i < intervals.size() && intervals.get(i).end < start){ ret.add(intervals.get(i++)); } if(i == intervals.size()){ ret.add(new Interval(start, end)); return ret; } if(intervals.get(i).start < end){ end = Math.max(intervals.get(i).end, end); } start = Math.min(intervals.get(i).start, start); for(; i < intervals.size(); i++){ Interval in = intervals.get(i); if(end >= in.start){ if(end < in.end){ end = in.end; } } else{ ret.add(new Interval(start, end)); start = in.start; end = in.end; } } ret.add(new Interval(start, end)); return ret; }}
阅读全文
0 0
- 【LeetCode】数组系列(间隔)
- 【LeetCode】数组系列(排序)
- 【LeetCode】数组系列(去重)
- 【LeetCode】数组系列(子序列)
- 【LeetCode】查找数组系列
- 【LeetCode题目记录-4】插入数组间隔问题
- LeetCode | Merge Intervals(合并区间间隔)
- 数组的最大间隔
- LeetCode 358. Rearrange String k Distance Apart(字符间隔)
- 查找数组中只出现一次的数(一)——Leetcode系列(十四)
- leetcode 编程题 系列 (二分查找)旋转数组的查找、重复数字 33 153
- C#多线程编程实战(从入门到精通系列)第二篇 指定间隔终止线程
- leetcode数组(一)
- 数组相邻间隔1进行查找
- PHP数组间隔取数的实现
- C语言间隔删除数组的探究
- 算法学习-数组的最大间隔
- 返回指定时间段相同间隔数组
- 深入剖析Tomcat-实现简单的Web服务器
- Java基础之集合
- 项目采购管理脉络
- 六. NAL Unit格式解析
- Spring和Servlet的整合
- 【LeetCode】数组系列(间隔)
- HEXO搭建个人博客(二):Github上场
- Maven学习总结(5)——聚合与继承
- Simulink仿真时AWGN中的信噪比SNR
- 从mysql查询机构表用java解析成机构树
- 删除指定目录下指定类型的文件
- mybatis的配置二
- 七、 熵编码算法(1)——基础知识
- ZJOI2008生日聚会