• 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 = 0;
                var end = 0;
    
                bool NeedMergeStar = false;
                bool NeddMergeEnd = false;
    
                var result = new List<int[]>();
    
                while (start < intervals.Length)
                {
    
                    if (intervals[start][0] == newInterval[0] || (intervals[start][0] < newInterval[0] && intervals[start][1] >= newInterval[0]))
                    {
                        NeedMergeStar = true;
                        break;
                    }
                    else if (intervals[start][0] > newInterval[0])
                    {
                        break;
                    }
    
                    start++;
                }
    
                while (end < intervals.Length)
                {
                    if (intervals[end][1] == newInterval[1] || (intervals[end][1] > newInterval[1] && intervals[end][0] <= newInterval[1]))
                    {
                        NeddMergeEnd = true;
                        break;
                    }
                    else if (intervals[end][0] > newInterval[1])
                    {
                        break;
                    }
    
                    end++;
                }
    
                var index = intervals.Length - 1;
    
                if (!NeedMergeStar && !NeddMergeEnd)
                {
                    if (start == index && end == index)
                    {
                        if (intervals[0][0] > newInterval[1])
                        {
                            result.Add(newInterval);
                            result.AddRange(intervals);
                        }
                        else if (intervals[index][1] < newInterval[0])
                        {
                            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][1] = Math.Max(result[start][1], newInterval[1]);
                        }
                        else
                        {
                            newInterval[0] = intervals[start][0];
                            
                            for (int i = start; i < end; i++)
                            {
                                result.RemoveAt(start);
                            }
    
                            result.Insert(start, newInterval);
                        }
    
                    }
                    else if (!NeedMergeStar && NeddMergeEnd)
                    {
                        if (start == end)
                        {
                            result[start][0] = Math.Min(result[start][0], newInterval[0]);
                        }
                        else
                        {
                            newInterval[1] = intervals[end][1];
    
                            for (int i = start; i <= end; i++)
                            {
                                result.RemoveAt(start);
                            }
    
                            result.Insert(start, newInterval);
                        }
    
                    }
                    else
                    {
                        newInterval[0] = intervals[start][0];
                        newInterval[1] = intervals[end][1];
    
                        for (int i = start; i <= end; i++)
                        {
                            result.RemoveAt(start);
                        }
    
                        result.Insert(start, newInterval);
                    }
                }
    
                return result.ToArray();
            }
    }

      分情况讨论的,效率不是很高emmm。

  • 相关阅读:
    什么是微服务架构?
    docker 安装 mongo he SCRAM_SHA_1 authentication mechanism requires libmongoc built with ENABLE_SSL
    好用的JsonView插件
    新建vmware虚拟机无法访问网络
    安装Docker到CentOS(YUM)
    CentOS7下安装MySQL5.7安装与配置
    mongodb 阿里云centos7安装
    JS数组
    前端基本知识
    JS算法
  • 原文地址:https://www.cnblogs.com/dogtwo0214/p/11923450.html
Copyright © 2020-2023  润新知