本文共 1212 字,大约阅读时间需要 4 分钟。
class Solution { public int[][] merge(int[][] intervals) { if(intervals.length < 2) return intervals; // 排序:根据区间起始值升序 Arrays.sort(intervals, (o1,o2)->(o1[0]-o2[0])); Listlist = new ArrayList<>(); int[] lastInterval = null; //数组指针 for (int[] interval : intervals) { //如果当前区间与上个区间不重合,区间如list,指针后移 if(lastInterval == null || lastInterval[1] < interval[0]){ lastInterval = interval; list.add(lastInterval); } //重合则判断当前区间是否为上一区间子集,如果不是就要更新右边界 else if(lastInterval[1] < interval[1]){ lastInterval[1] = interval[1]; } } return list.toArray(new int[0][]); }}
双指针法:class Solution { public int maxArea(int[] height) { int i = 0, j = height.length - 1, res = 0; while(i < j){ //每次更新面积最大值 res,直到 i == j 时返回 res。 res = height[i] < height[j] ? Math.max(res, (j - i) * height[i++]): Math.max(res, (j - i) * height[j--]); } return res; }}
转载地址:http://hfrsi.baihongyu.com/