【备战字节面试】算法特训-排序算法

148 阅读1分钟

排序算法

适用场景

实战1 452. 用最少数量的箭引爆气球

import java.util.*;

class Solution {
    public int findMinArrowShots(int[][] points) {
        if(points.length == 1){
            return 1;
        }
        // 下标1排序
        Arrays.sort(points, new Comparator<int[]>(){
            @Override
            public int compare(int[] a , int[] b){
                // 可能存在负数
                if(a[1] < b[1]){
                    return -1;
                }else if(a[1] == b[1]){
                    return 0;
                }else{
                    return 1;
                }
            }
        });
        // 第一个位置
        int pos = points[0][1];
        int ans = 1;
        for(int i = 1 ; i < points.length ; i++){
            // 需要新的箭
            if(points[i][0] > pos){
                pos = points[i][1];
                ans++;
            }
        }
        return ans;
    }
}

实战2 56. 合并区间



class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length == 1){
            return intervals;
        }
        // 第一下标升序
        Arrays.sort(intervals,new Comparator<int[]>(){
            public int compare(int[] a ,int[] b){
                return a[0] - b[0];
            }
        });
        List<int[]> ret = new ArrayList<int[]>();
        for(int i = 0, len = intervals.length ; i < len ;i++ ){
            int tmp = i;
            int maxRight = intervals[i][1];
            while(i + 1 < len && intervals[i][1] >= intervals[i+1][0]){
                maxRight = Math.max(intervals[i+1][1],maxRight);
                i++;
            }
            ret.add(new int[]{intervals[tmp][0],maxRight});
        }
        return ret.toArray(new int[ret.size()][]);
    }
}