最大子数组和 LeetCode 53
题目链接:[LeetCode 53 - 中等]
思路
maxSum = Math.max(curSum,maxSum);
if(curSum<=0){
curSum = 0;
}
两者的顺序不能更换
贪心:
class Solution {
public int maxSubArray(int[] nums) {
int curSum = 0;
int maxSum = Integer.MIN_VALUE;
for(int i=0;i<nums.length;i++){
curSum += nums[i];
maxSum = Math.max(curSum,maxSum);
if(curSum<=0){
curSum = 0;
}
}
return maxSum;
}
}
加油站 LeetCode 134
题目链接:[LeetCode 134 - 中等]
思路
1.如何找到一个加油站的序号:result = (i+1)%gas.length; 2.如何判断是否存在解:if(totalSum<0)result=-1;
贪心:
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int result = 0;
int curSum = 0;
int totalSum = 0;
for(int i=0;i<gas.length;i++){
curSum += gas[i]-cost[i];
totalSum += gas[i]-cost[i];
if(curSum<0){
result = (i+1)%gas.length;
curSum = 0;Q
}
}
if(totalSum<0)result=-1;
return result;
}
}
监控二叉树 LeetCode 968
题目链接:[LeetCode 968 - 困难]
思路
该题非常难,需要斟酌。
贪心:
class Solution {
int res=0;
public int minCameraCover(TreeNode root) {
if(minCame(root)==0){
res++;
}
return res;
}
public int minCame(TreeNode root){
if(root==null){
return 2;
}
int left = minCame(root.left);
int right = minCame(root.right);
if(left==2&&right==2){
return 0;
}else if(left==0||right==0){
res++;
return 1;
}else{
return 2;
}
}
}