合并区间
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class day34_56_合并区间 {
public static void main(String[] args) {
}
public int[][] merge(int[][] intervals) {
//思路是遍历没段的start和end然后根据判断情况去决定是否合并
List<int[]> res=new LinkedList<>();
Arrays.sort(intervals, (x, y) -> Integer.compare(x[0], y[0]));
//还是要先sort一下按照第一个元素进行排序
if (intervals.length<=1) {
return intervals;
}
for(int i=1;i<intervals.length;i++){
if (intervals[i][0]>intervals[i-1][1]) {
res.add(intervals[i-1]);
}else if (intervals[i][0]<=intervals[i-1][1]) {
intervals[i][0]=intervals[i-1][0];
if (intervals[i-1][1]>intervals[i][1]) {
intervals[i][1]=intervals[i-1][1];
}
}
if (i==intervals.length-1) {
res.add(intervals[i]);
}
}
return res.toArray(new int[res.size()][]);
}
}
自己的思路有点乱,主要有两点,加入最后一次遍历的元素,还有就是这个区间被上一个区间包括 的情况要考虑进去
单调递增的数字
public class day34_738_单调递增的数字 {
public int monotoneIncreasingDigits(int n) {
String[] strings=(n+"").split("");
int start=strings.length;
for(int i=strings.length-1;i>0;i--){
if (Integer.parseInt(strings[i]) < Integer.parseInt(strings[i - 1])){
strings[i-1]=(Integer.parseInt(strings[i-1])-1)+"";
start=i;
}
}
for(int i=start;i<strings.length;i++){
strings[i]="9";
}
return Integer.parseInt(String.join("",strings));
}
}
逻辑简单实现起来复杂