LeetCode刷题191124
博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教。题目及解法来自于力扣(LeetCode),传送门。
算法:
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]
示例 2:
输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]
解释: 这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
public class Solution {
public int[][] Insert(int[][] intervals, int[] newInterval)
{
var start = ;
var end = ;
bool NeedMergeStar = false;
bool NeddMergeEnd = false;
var result = new List<int[]>();
while (start < intervals.Length)
{
if (intervals[start][] == newInterval[] || (intervals[start][] < newInterval[] && intervals[start][] >= newInterval[]))
{
NeedMergeStar = true;
break;
}
else if (intervals[start][] > newInterval[])
{
break;
}
start++;
}
while (end < intervals.Length)
{
if (intervals[end][] == newInterval[] || (intervals[end][] > newInterval[] && intervals[end][] <= newInterval[]))
{
NeddMergeEnd = true;
break;
}
else if (intervals[end][] > newInterval[])
{
break;
}
end++;
}
var index = intervals.Length - ;
if (!NeedMergeStar && !NeddMergeEnd)
{
if (start == index && end == index)
{
if (intervals[][] > newInterval[])
{
result.Add(newInterval);
result.AddRange(intervals);
}
else if (intervals[index][] < newInterval[])
{
result.AddRange(intervals);
result.Add(newInterval);
}
else
{
result.AddRange(intervals);
result.Insert(start, newInterval);
}
}
else
{
if (start == end)
{
result.AddRange(intervals);
result.Insert(start, newInterval);
}
else
{
result.AddRange(intervals);
for (int i = start; i < end; i++)
{
result.RemoveAt(start);
}
result.Insert(start, newInterval);
}
}
}
else
{
result.AddRange(intervals);
if (NeedMergeStar && !NeddMergeEnd)
{
if (start == end)
{
result[start][] = Math.Max(result[start][], newInterval[]);
}
else
{
newInterval[] = intervals[start][];
for (int i = start; i < end; i++)
{
result.RemoveAt(start);
}
result.Insert(start, newInterval);
}
}
else if (!NeedMergeStar && NeddMergeEnd)
{
if (start == end)
{
result[start][] = Math.Min(result[start][], newInterval[]);
}
else
{
newInterval[] = intervals[end][];
for (int i = start; i <= end; i++)
{
result.RemoveAt(start);
}
result.Insert(start, newInterval);
}
}
else
{
newInterval[] = intervals[start][];
newInterval[] = intervals[end][];
for (int i = start; i <= end; i++)
{
result.RemoveAt(start);
}
result.Insert(start, newInterval);
}
}
return result.ToArray();
}
}
分情况讨论的,效率不是很高emmm。
LeetCode刷题191124的更多相关文章
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- leetcode 刷题进展
最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多 前200的吃透了 足以应付非算法岗 ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- LeetCode刷题总结之双指针法
Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
随机推荐
- Zookeeper选取机制
1)半数机制:集群中半数以上机器存活,集群可用.所以Zookeeper适合安装奇数台服务器. 2)Zookeeper虽然在配置文件中并没有指定Master和Slave.但是,Zookeeper工作时, ...
- 【转载】Dockerfile文件详解
什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...
- HDU5343 MZL's Circle Zhou(SAM+记忆化搜索)
Problem Description MZL's Circle Zhou is good at solving some counting problems. One day, he comes u ...
- 正则replace 回调函数里接收的参数是什么?
前言 我们都知道 replace 在做替换处理方面会很常用,通常也是第一个会想到的方法.replace 第一个参数可以传入 string 或 RegExp,第二个参数可以传入 string 或 一个回 ...
- Appium之选择/操作元素
Appium是如何选择.操作元素的呢? appium自动化 ------ 选择界面 元素 操作元素 ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...
- 【CSS】309- 复习 CSS盒模型
点击上方"前端自习课"关注,学习起来~ 一.概念 CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:外边距(margin).边框(border).内边距(padding ...
- 浅析Java String
String 特性 1.其定义的字符串序列不可变. 2.是一个final类,不可被继承,且其内部一些重要方法被定义为final类型,不可重写. 3.内部实现Serializable接口(支持字符串序列 ...
- 搞懂toString()与valueOf()的区别
一.toString() 作用:toString()方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 “[object type]”,其中type是对象类型. 二.valu ...
- 用正则表达式【regexp】进行高级搜索数据
正则表达式介绍 正则表达式是用来匹配文本的特殊字符集合,如果你想从一个文本中提取电话号码而已使用正则表达式,如果你需要查找名字中包含数字的所有文件可以使用正则,如果你你要在文本块中找到所有重复的单词, ...
- Codeforces Round #592 (Div. 2)
A. Pens and Pencils 题目链接:https://codeforces.com/contest/1244/problem/A 题意: 给定五个数 a , b , c , d , k 求 ...