56. 合併區間
題目連結:56. 合併區間
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰合併區間
日期:2024-10-06
想法:重疊區間類似問題
Java程式碼如下:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new ArrayList<>();
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
for(int i = 1; i < intervals.length; i++) {
if(intervals[i - 1][1] >= intervals[i][0]) {
intervals[i][1] = Math.max(intervals[i - 1][1], intervals[i][1]);
intervals[i][0] = intervals[i - 1][0];
}else {
res.add(new int[]{intervals[i - 1][0], intervals[i - 1][1]});
}
}
res.add(new int[]{intervals[intervals.length - 1][0], intervals[intervals.length - 1][1]});
return res.toArray(new int[res.size()][]);
}
}
738.單調遞增的數字
題目連結:738.單調遞增的數字
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰單調遞增的數字
日期:2024-10-06
想法:從右往左遍歷,如果前一個數大於後面的數(按N數字排序),前一個數-1,後一個數置為9即可。
Java程式碼如下:
class Solution {
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));
}
}