- 合并区间
本题也是重叠区间问题,如果昨天三道都吸收的话,本题就容易理解了。
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