- 合併區間
本題也是重疊區間問題,如果昨天三道都吸收的話,本題就容易理解了。
https://programmercarl.com/0056.合併區間.html
能做出來
/**
* @param {number[][]} intervals
* @return {number[][]}
*/
var merge = function(intervals) {
intervals.sort((a, b)=>{
if (a[0] !== b[0]) {
return a[0] - b[0];
} else {
return a[1] - b[1];
}
});
const res = [intervals[0]];
for (let i=1; i<intervals.length;i++) {
if (intervals[i][0]<=res[res.length-1][1]) {
res[res.length-1][1] = Math.max(intervals[i][1], res[res.length-1][1]);
} else {
res.push(intervals[i]);
}
}
return res;
};
738.單調遞增的數字
https://programmercarl.com/0738.單調遞增的數字.html
沒思路
利用字串前放+號進行隱式轉換
n = n.toString()
n = n.split('').map(item => {
return +item
})
let flag = Infinity
for(let i = n.length - 1; i > 0; i--) {
if(n [i - 1] > n[i]) {
flag = i
n[i - 1] = n[i - 1] - 1
n[i] = 9
}
}
for (let i = flag; i< n.length;i++) {
n[i] = 9
}
n = n.join('')
return +n
968.監控二叉樹 (可跳過)
本題是貪心和二叉樹的一個結合,比較難,一刷大家就跳過吧。
https://programmercarl.com/0968.監控二叉樹.html
太難,看影片題解理解了
注意三個if的順序不能調換
var minCameraCover = function(root) {
let result = 0
function traversal(cur) {
if(cur === null) {
return 2
}
let left = traversal(cur.left)
let right = traversal(cur.right)
if(left === 2 && right === 2) {
return 0
}
if(left === 0 || right === 0) {
result++
return 1
}
if(left === 1 || right === 1) {
return 2
}
return -1
}
if(traversal(root) === 0) {
result++
}
return result
};
總結
可以看看貪心演算法的總結,貪心本來就沒啥規律,能寫出個總結篇真的不容易了。
https://programmercarl.com/貪心演算法總結篇.html