题一:单调递增的数字
题目链接: 单调递增的数字
解题思路: 暴力
解题代码:
var monotoneIncreasingDigits = function (n) {
let arr = n.toString().split("");
arr.forEach((ele, index) => {
arr[index] = parseInt(ele);
})
console.log(arr)
if (arr.length <= 1) return n;
for (let i = arr.length - 1; i >= 1; i--) {
if (arr[i] < arr[i - 1]) {
let temp = i;
arr[i] = 9;
while (temp < arr.length - 1) {
if (arr[temp] > arr[temp + 1]) arr[temp + 1] = 9;
else break;
temp++;
}
arr[i - 1] -= 1;
}
}
console.log(arr)
n = parseInt(arr.join(""));
return n;
};
题二: 买卖股票的最佳时机含手续费
题目链接: 买卖股票的最佳时机含手续费
解题思路: 等待二刷 ,没弄明白
解题代码:
var maxProfit = function (prices, fee) {
let buy = prices[0] + fee;
let profit = 0;
for (let i = 1; i < prices.length; i++) {
if (prices[i] + fee < buy) {
buy = prices[i] + fee;
} else if (prices[i] > buy) {
profit += prices[i] - buy;
buy = prices[i];
}
}
return profit;
};
题三:监控二叉树
题目链接: 监控二叉树
解题思路: 蒙圈状态
解题代码:
var minCameraCover = function(root) {
// 状态定义
// a: 根节点一定要放置
// b: 全覆盖
// c: 覆盖左右子树
const dfs = (root)=>{
if(root == null)return [Number.MAX_SAFE_INTEGER,0,0];
const [la,lb,lc] = dfs(root.left);
const [ra,rb,rc] = dfs(root.right);
// 根节点一定要放的情况
const a = 1 + lc+rc;
// 整体覆盖
const b = Math.min(
a, // 根节点放
Math.min(la+rb,ra+lb) // 根节点不放
)
const c = Math.min(a,lb+rb)
return [a,b,c];
}
return dfs(root)[1];
};