leetcode刷题笔记之区间合并

117 阅读1分钟

例题1: 56. 合并区间

class Solution {    public int[][] merge(int[][] intervals) {        //先根据第一个数字从小到大排序        //判断第一个区间的右边界和第二个的左边界大小关系        //大于的话就取前左右后,合并        //小于就把两个区间都放到新的二维数组里        //生成的区间再和下一个进行同样的操作        if(intervals.length==0 || intervals[0].length==0) return intervals;        Arrays.sort(intervals,(v1,v2)-> v1[0]-v2[0]);        int[][] result=new int[intervals.length][2];        int index=0;        result[index][0]=intervals[0][0];        result[index][1]=intervals[0][1];        for(int i=1;i<intervals.length;i++){            if(result[index][1]>=intervals[i][0]){                result[index][1]=Math.max(result[index][1],intervals[i][1]);            }else{                index++;                result[index][0]=intervals[i][0];                result[index][1]=intervals[i][1];            }        }        return Arrays.copyOf(result,index+1);    }        }
执行用时:8 ms, 在所有 Java 提交中击败了62.89%的用户
内存消耗:42.5 MB, 在所有 Java 提交中击败了35.65%的用户

例题2:面试题 05.01. 插入

class Solution {    public int insertBits(int N, int M, int i, int j) {        int mask=((1<<(j-i+1))-1)<<i;        mask=~mask;        N&=mask;        M=M<<i;        return M|N;    }}

这题可以用位运算,注意位运算的左移右移和取反。