56.合并区间
第一想法
将数组按照左边界排序,先new新数组,其左边界为当前数组左边界,右边界判断是否重复,其数值为最后一个重复的数组的右边界。
代码
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals,(o1,o2)->Integer.compare(o1[0],o2[0]));
int[][] mergeIntervals = new int[intervals.length][];
int index = -1;
for (int[] interval : intervals) {
if(index==-1||interval[0]>mergeIntervals[index][1]){//若当前数组大于mergeInterval的右边界,或者为初始值
mergeIntervals[++index] = interval;
}else{
//重叠情况下修改合并区间右边界
mergeIntervals[index][1] = Math.max(interval[1],mergeIntervals[index][1]);
}
}
return Arrays.copyOf(mergeIntervals,index+1);
}
}
738.单调递增的数字
代码随想录
倒序遍历,只要碰到不单调递增的即 str[i-1]> strt[i] ,则str[i-1] 减一, str[i] 为9
但是这里不能直接赋值为9,需要记录index,最后一起赋值为9,比如 1000,如果只碰到非单调递增10,就只能将第一个零赋值为9,变成0900,不是正确答案。代码不好写
代码
class Solution {
public int monotoneIncreasingDigits(int n) {
String string = Integer.toString(n);
char[] charArray = string.toCharArray();
int flag = charArray.length;
for(int i = charArray.length-2; i >= 0; i--){
if(charArray[i]>charArray[i+1]){
charArray[i]--;
flag = i+1;
}
}
for(int i = flag;i<string.length();i++){
charArray[i] = '9';
}
return Integer.parseInt(String.valueOf(charArray));
}
}