算法修炼Day36|● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

45 阅读1分钟
题目:435. 无重叠区间 - 力扣(LeetCode)
代码实现:
class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
        
        int count = 0;
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] < intervals[i - 1][1]) {
                count++;
                intervals[i][1] = Math.min(intervals[i - 1][1], intervals[i][1]);
            }
        }
        return count;
    }
}
题目:763. 划分字母区间 - 力扣(LeetCode)
代码实现:
class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> ans = new ArrayList<>();
        int[] edge = new int[26];
        for (int i = 0; i < s.length(); i++) {
            edge[s.charAt(i) - 'a'] = i;
        }
        int idx = 0;
        int start = -1;
        for (int i = 0; i < s.length(); i++) {
            idx = Math.max(idx, edge[s.charAt(i) - 'a']);
            if (i == idx) {
                ans.add(i - start);
                start = i;
            }
        }
        return ans;
    }
}
题目:56. 合并区间 - 力扣(LeetCode)
代码实现:
class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
        List<int[]> ans = new ArrayList<>();
        if (intervals.length == 1) {
            return intervals;
        }
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] <= intervals[i - 1][1]) {
                intervals[i][0] = Math.min(intervals[i - 1][0], intervals[i][0]);
                intervals[i][1] = Math.max(intervals[i - 1][1], intervals[i][1]);
            } else {
                ans.add(intervals[i - 1]);
            }
        }
        ans.add(intervals[intervals.length - 1]);
        return ans.toArray(new int[ans.size()][]);
    }
}