提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
因为贪心的简单题可能往往过于简单甚至感觉不到贪心,如果我连续几天讲解简单的贪心,估计录友们一定会不耐烦了,会感觉贪心有啥好学的。 但贪心的难题又真的有点难,所以我是简单困难交错着讲的,这样大家就感觉难度适中,而且贪心也没有什么框架和套路,所以对刷题顺序要求没有那么高。
一、力扣738. 单调递增的数字
class Solution {
public 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]--;
start = i+1;
}
}
for (int i = start; i < s.length(); i++) {
chars[i] = '9';
}
return Integer.parseInt(String.valueOf(chars));
}
}
二、力扣968. 监控二叉树
在这里插入代码片/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int minCameraCover(TreeNode root) {
int[] res = fun(root);
return res[0] == 3? res[1]+1 : res[1];
}
public int[] fun(TreeNode root){
int[] res = new int[2];
if(root == null){
res[0] = 2;
return res;
}
int[] left = fun(root.left);
int[] right = fun(root.right);
if(left[0] == 3 || right[0] == 3){
res[0] = 1;
res[1] = 1;
}else if(left[0] == 2 && right[0] == 2){
res[0] = 3;
}else{
res[0] = 2;
}
res[1] += (left[1] + right[1]);
return res;
}
}
贪心算法实战:力扣738单调递增数字与968监控二叉树问题解析
本文介绍了如何使用贪心算法解决LeetCode中的两道题目:738单调递增的数字,通过调整数字使其单调递增;以及968监控二叉树,找到最小数量的摄像头覆盖所有节点。作者强调了贪心算法在这些问题中的应用和策略选择。
364

被折叠的 条评论
为什么被折叠?



