贪心算法part5

贪心算法part5

56. 合并区间 - 力扣(LeetCode)

跟昨天做的题类似

注意一些小细节

/**
时间复杂度 : O(NlogN) 排序需要O(NlogN)
空间复杂度 : O(logN)  java 的内置排序是快速排序 需要 O(logN)空间

*/
class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals, (a, b) -> {
            if(a[0] == b[0]){
                return a[1] - b[1];
            }
            return a[0] - b[0];
        });
        LinkedList<int[]> res = new LinkedList<>();
        for(int i = 0; i < intervals.length; i++){
            int[] tmp = new int[2];
            int index = i;
            tmp[0] = intervals[index][0];
            tmp[1] = intervals[index][1];
            while(i < intervals.length - 1 && tmp[1] >= intervals[i + 1][0]){
                if(tmp[1] < intervals[i + 1][1]){
                    tmp[1] = intervals[i + 1][1];
                }
                i++;
            }
            res.add(tmp);
        }
        return res.toArray(new int[res.size()][]);
    }
}

tip

列表转换成二维数组:

LinkedList<int[]> res = new LinkedList<>();
return res.toArray(new int[res.size()][]);

738. 单调递增的数字 - 力扣(LeetCode)

本题思路:遇到98这样的数字,高位--,低位变成9,从后往前遍历

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] chars = s.toCharArray();
        int start = s.length();
        for(int i = s.length() - 2; i >= 0; i--){
            if(chars[i] > chars[i + 1]){
                chars[i]--;
                start = i + 1;
            }
        }
        for(int i = start; i < s.length(); i++){
            chars[i] = '9';
        }
        return Integer.parseInt(String.valueOf(chars));
    }
}

tip:

总结String -> char[] -> int的方法

String -> char[] :使用s.toCharArray()

char[] -> String :使用String.valueOf(char[])

int -> String :使用String.valueOf()

String -> int :使用Integer.parseInt(s)

posted @ 2025-06-26 17:50  泡芙猪  阅读(14)  评论(0)    收藏  举报