- 56. 合并区间
- 先按照左边界进行排序,然后判断右边界是否重叠,更新区间
- 738.单调递增的数字
- 从后往前遍历 如果发现前一个数 > 后一个数,将前一个数 - 1,后一个变成9
package algor.trainingcamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author lizhe
* @version 1.0
* @description:
* 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode.cn/problems/merge-intervals
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* @date 2023/5/11 08:10
*/
public class LeetCode56 {
public int[][] merge(int[][] intervals) {
List<int[]> res = new ArrayList<>();
if(null == intervals || intervals.length == 0){
return res.toArray(new int[0][]);
}
Arrays.sort(intervals, (a,b) -> a[0] - b[0]);
int i = 0;
while(i < intervals.length){
int left = intervals[i][0];
int right = intervals[i][1];
//出现重叠区间
while(i < intervals.length - 1 && intervals[i + 1][0] <= right){
//定义重叠区间右边界
right = Math.max(intervals[i + 1][1], right);
i++;
}
i++;
res.add(new int[]{left, right});
}
return res.toArray(new int[0][]);
}
}
package algor.trainingcamp;
/**
* @author lizhe
* @version 1.0
* @description:
* 给定一个非负整数 N,找出小于或等于 N 的最大的整数,
* 同时这个整数需要满足其各个位数上的数字是单调递增。
* (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
* @date 2023/5/11 07:50
*
* 思路: 从后往前遍历 如果发现前一个数 > 后一个数,将前一个数 - 1,后一个变成9
*/
public class LeetCode738 {
public int monotoneIncreasingDigits(int n) {
String s = String.valueOf(n);
char[] chars = s.toCharArray();
int index = chars.length;
for(int i = chars.length - 1;i >= 1;i--){
if(chars[i - 1] > chars[i]){
chars[i - 1]--;
index = i;
}
}
for(int i = index;i < chars.length;i++){
chars[i] = '9';
}
return Integer.parseInt(new String(chars));
}
}

被折叠的 条评论
为什么被折叠?



