代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间

435. 无重叠区间 - 力扣(LeetCode)
本题和射气球题目类似,都是重叠区间问题,先按照左区间排序,如果下一区间和上一区间有重叠,那么count+1,同时取两者右边界较小值与后面区间继续比较

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (a,b) -> {
            return Integer.compare(a[0],b[0]);
        });
        int count = 0;
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] >= intervals[i-1][1]) {
                continue;
            } else {
                count++;
                intervals[i][1] = Math.min(intervals[i][1], intervals[i-1][1]);
            }
        }
        return count;
    }
}

763.划分字母区间

763. 划分字母区间 - 力扣(LeetCode)
首先计算出每个元素出现的最远位置,然后遍历字符串,选择最大的最远位置,直到该最大值等于该最远位置,就分割区间

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> result = new ArrayList<>();
        //计算元素的最远位置
        int[] edge = new int[26];
        for (int i = 0; i < s.length(); i++) {
            edge[s.charAt(i) - 'a'] = i;
        }
        int left = 0;
        int right = 0;
        for (int i = 0; i < s.length(); i++) {
            right = Math.max(right, edge[s.charAt(i) - 'a']);
            if (i == right) {
                result.add(right - left + 1);
                left = i + 1;
            }
        }
        return result;
    }
}

56. 合并区间

56. 合并区间 - 力扣(LeetCode)
本题仍然是区间问题,当没有区间重叠时,直接加入数组中,如果有重叠,那么合并即可,合并时右边界取较大值

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> result = new LinkedList<>();
        Arrays.sort(intervals, (a,b) -> {
            return a[0] - b[0];
        });
        result.add(intervals[0]);
        int start;
        int end;
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] <= result.getLast()[1]) {
                start = result.getLast()[0];
                end = Math.max(result.getLast()[1], intervals[i][1]);
                result.removeLast();
                result.add(new int[]{start, end});
            } else {
                result.add(intervals[i]);
            }
        }
        return result.toArray(new int[result.size()][2]);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容