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 ... 
随机推荐
- JavaScript基础3
			While循环 在指定条件为真时循环执行代码块.先确定条件再执行代码 语法 while(条件) { 需要执行的代码 } 条件中所用变量如果没有值,循环就不会停下,会导致浏览器崩溃: do...whil ... 
- [TimLinux] 理解selinux
			1. 概念 SELinux有三种工作模式:Enforcing, Permissive, disabled.Enforcing对应又有几种修饰(targeted, minimum, mls). 2. 解 ... 
- HDU5973 Game of Geting Stone(威佐夫博弈)
			Two people face two piles of stones and make a game. They take turns to take stones. As game rules, ... 
- ubuntu用户帐号
			与用户帐号相关的有几个非常重要的文件/ect/passwd,/etc/shadow,/etc/group /etc/passwd 执行 head -n 5 /ect/passwd显示前5行,内容如下: ... 
- 资源池模式和单例模式实现的自定义数据库连接池java实现版
			在企业级开发中,我们往往不会直接使用原生的JDBC操作来实现与数据库得连接.因为数据库的连接是一个很宝贵的资源且耗时,我们往往会在内存中引入一个资源池来统一管理数据库的连接.这个模式也被总结为一种设计 ... 
- 【MobX】391- MobX 入门教程(下)
			点击上方"前端自习课"关注,学习起来~ 三.MobX 常用 API 介绍 3. 修改可观察数据 在上一部分内容中,我们了解到,对可观察的数据做出反应的时候,需要我们手动修改可观察数 ... 
- Lua-Async 协程的高级用法
			Lua-Async 这是一个基于协程的异步调用库, 该库的设计思路类似JavaScript的Promise, 但相比Promise, 它有更多的灵活性. -- 引入Async local Async ... 
- WPF之图片处理系列
			WPF 中的一些图片处理方法 一,视觉处理(控件展示) 1,显示图片 Image控件展示 Xaml代码: <Image source="/Resources/Images/1.png& ... 
- Vue ---- 项目与环境搭建 初始项目结构 Vue生命周期
			目录 1. vue环境搭建 2. Vue项目搭建 pycharm配置并启动vue项目 3 . 认识项目 1. vue项目目录结构 2. 配置文件:vue.config.js 3. main.js 4. ... 
- chrome显示正常,IE报400的错
			发现是因为参数里面有一个是中文,应该是IE没有转码,所以会报错,只要用encodeURI()实现转码即可 
