贪心算法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)
浙公网安备 33010602011771号