算法day26-贪心之重叠区间(4)

目录

  1. 用最少数量的箭引爆气球
  2. 无重叠区间
  3. 划分字母区间

一、用最少数量的箭引爆气球

 https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/?envType=problem-list-v2&envId=8At1GmaZ

 

class Solution {
    public int findMinArrowShots(int[][] points) {
        if(points.length == 0)  return 0;
        // Step 1: 按 xend 排序(每个气球的右边界)
        Arrays.sort(points, (a,b)-> Integer.compare(a[1],b[1]));     //按X_end进行升序排序
        // Step 2: 初始化第一支箭射在第一个气球的xend位置
        int res = 1;
        int xend = points[0][1];
        for(int i=1; i<points.length; i++){
            if(points[i][0] > xend){  
                res++;
                xend = points[i][1];
            }
            // 否则,当前气球可以被上一支箭射中,什么都不做
        }
        return res;
    }
}

 

二、无重叠区间

 https://leetcode.cn/problems/non-overlapping-intervals/?envType=problem-list-v2&envId=8At1GmaZ

 

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        //去掉最少的区间使得剩下区间没有重叠=>保留最多的不重叠区间
        //是上一题的反问题

        //先按结束位置排序
        Arrays.sort(intervals,(a,b)->(Integer.compare(a[1],b[1])));
        int res = 1;
        int xend = intervals[0][1];
        for(int i=1; i<intervals.length; i++){
            if(intervals[i][0] >= xend){
                res++;
                xend = intervals[i][1];
            }
        }
        return intervals.length - res;
    }
}

 

三、划分字母区间

 https://leetcode.cn/problems/partition-labels/?envType=problem-list-v2&envId=8At1GmaZ

 

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<>();
        int[] last = new int[26];       //记录26个字母最后出现的位置
        //1.遍历记录每个字符的最后出现的位置
        for(int i=0; i<s.length(); i++){
            last[s.charAt(i) - 'a'] = i;
        }
        //2.从左到右扫描,按最大边界切分
        int start = 0, end = 0;
        for(int i=0; i<s.length(); i++){
            end = Math.max(end, last[s.charAt(i)-'a']);     //更新最大边界
            if(i == end){           //到达最大边界
                res.add(end-start+1);
                start = i+1;
            }
        }
        return res;
    }
}

 

posted @ 2025-05-26 12:31  筱倩  阅读(10)  评论(0)    收藏  举报