问题1:合并区间
题目:
思路:
借用数组
代码:
java
import org.omg.CORBA.MARSHAL;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
public class 合并区间 {
public static void main(String[] args) {
int[][] strArr3 = merge(new int[][]{{1, 3}, {2, 6}, {8, 10}, {15, 18}});
// 1. 将二维数组转为Stream,处理每个子数组
String result = Arrays.stream(strArr3)
// 2. 将子数组转为"[1, 3]"格式的字符串
.map(Arrays::toString)
// 3. 替换[]为{},得到"{1, 3}"
.map(s -> s.replace("[", "{").replace("]", "}"))
// 4. 用", "连接所有子数组字符串
.collect(Collectors.joining(", "));
// 5. 输出结果
System.out.println(result);
}
public static int[][] merge(int[][] intervals) {
/*
1. 可以先排序 按intervals[0]排序
*/
if (intervals.length <= 1) return intervals;
List<int[]> res = new LinkedList<>();
Arrays.sort(intervals,(a,b)->a[0] - b[0]);
res.add(intervals[0]);
for (int i = 1; i < intervals.length;i++){
if (intervals[i][0]<= res.get(res.size()-1)[1]){
res.get(res.size()-1)[1] = Math.max(res.get(res.size()-1)[1],intervals[i][1]);
}
else {
res.add(intervals[i]);
}
}
int [][] l = new int[res.size()][2];
return res.toArray(l);
}
}
问题2:单调递增的数字
题目:
思路:
从右边开始 采用进位制度 后将需要置值为9的 标记好
代码:
java
public class 单调递增的数字 {
public static void main(String[] args) {
System.out.println(monotoneIncreasingDigits(776));
}
public static 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]--;
// 标记从这里开始都是9
start = i+1;
}
}
for (int i = start; i < s.length(); i++) {
chars[i] = '9';
}
return Integer.parseInt(String.valueOf(chars));
}
}
问题3:监控二叉树(二刷再看)
题目:
思路:
代码: