zoukankan      html  css  js  c++  java
  • [leetCode]57. 插入区间

    一次遍历

    这题的关键是判断两个区间是否存在交集,比如区间$S_1[l_1,r_1],S_2[l_2, r_2];如果r_1<l_2说明S_1在S_2左侧无交集,如果l_1>r_2则说明S_1>S_2则S_1在S_2右侧无交集,如果不符合以上两个条件则说明有交集,$则可以通过$[max(l_1,l_2),min(r_1,r_2)]$求交集,通过$[min(l_1,l_2),max(r_1,r_2)]$求并集。
    通过遍历区间数组如果当前区间与新区间S无交集则直接加入答案,如果有交集则与新区间S进行合并,如果第一次遇到在S右侧($l>left$)的区间则将S加入答案,然后加入当前区间,遍历完数组后如果不存在这样的区间则需要把S加入答案。

    class Solution {
        public int[][] insert(int[][] intervals, int[] newInterval) {
            // newInterval 区间的左右下标
            int left = newInterval[0];
            int right = newInterval[1];
            // 存放答案的列表
            List<int[]> ans = new ArrayList<>();
            // bool 变量 判断是否加入S
            boolean placed = false;
            // 遍历原来的区间数组
            for (int[] interval : intervals) {
                // 在插入区间右侧无交集
                if (interval[0] > right) {
                    // 如果没有加入S
                    if (!placed) {
                        ans.add(new int[]{left, right});
                        placed = true;
                    }
                    ans.add(interval);
                } else if (interval[1] < left) {
                    // 在插入区间左侧且无交集
                    ans.add(interval);
                } else {
                    // 与插入区间有交集 计算并集
                    left = Math.min(left, interval[0]);
                    right = Math.max(right, interval[1]);
                }
            }
            // 如果不存在这样的区间则将s加入答案
            if (!placed) {
                ans.add(new int[]{left, right});
            }
            int[][] fans = new int[ans.size()][2];
            for (int i = 0; i < ans.size(); i++) {
                fans[i] = ans.get(i);
            }
            return fans;
        }
    }
    
  • 相关阅读:
    git 服务器的搭建
    两种读写配置文件的方案(app.config与web.config通用)
    实现UniqueAttribute唯一性约束-优化版
    实现UniqueAttribute唯一性约束
    WCF会话(Session)与实例(Instance)管理
    WCF实现方法重载
    WCF序列化
    WCF服务创建与使用(双工模式)
    WCF服务创建与使用(请求应答模式)
    我的WCF学习与强化系列文章
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13924432.html
Copyright © 2011-2022 走看看