用最少数量的箭引爆气球
public int findMinArrowShots(int[][] points) {
Arrays.sort(points, (a, b) -> Integer.compare(a[1], b[1]));
int res=1;
int rightSide=points[0][1];
for(int i=1;i<points.length;i++){
if(points[i][0]<=rightSide)continue;
res++;
rightSide=points[i][1];
}
return res;
}
无重叠区间
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals,(a,b)->Integer.compare(a[1],b[1]));
int count=1;
int rightSide=intervals[0][1];
for(int i=1;i<intervals.length;i++){
if(intervals[i][0]<rightSide)continue;
rightSide=intervals[i][1];
count++;
}
return intervals.length-count;
}
划分字母区间
public List<Integer> partitionLabels(String s) {
int[] hash=new int[26];
List<Integer> res=new ArrayList<Integer>();
for(int i=0;i<s.length();i++){
hash[s.charAt(i)-'a']=i;
}
int index=0;
int left=0;
for(int i=0;i<s.length();i++){
index=Math.max(index,hash[s.charAt(i)-'a']);
if(index==i){
res.add(i-left+1);
left=i+1;
}
}
return res;
}