目录
LeetCode 1005.K次取反后最大化的数组和
文章讲解:代码随想录
视频讲解:贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和_哔哩哔哩_bilibili
思路:首先在k次范围内,把负数都取反。在这基础上,如果k>0, 再把数组中的最小的正数取反。这里使用两次贪心的思想,两次都在k次范围内取数组中较小的数字取反。
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
int sum = 0;
Arrays.sort(nums);
for(int index = 0; index < nums.length; index++){
if(k > 0 && nums[index] < 0){
nums[index] = -nums[index];
k--;
}
sum += nums[index];
}
if(k % 2 == 1){
Arrays.sort(nums);
sum -= 2 * nums[0];
}
return sum;
}
}
LeetCode 134.加油站
文章讲解:代码随想录
视频讲解:贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili
力扣题目:LeetCode 134.加油站
代码如下(Java):
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int curSum = 0;
int totalSum = 0;
int index = 0;
for(int i = 0; i < gas.length; i++){
curSum += gas[i] - cost[i];
totalSum += gas[i] - cost[i];
if(curSum < 0){
index = (i + 1) % gas.length;
curSum = 0;
}
}
if(totalSum < 0) return -1;
return index;
}
}
LeetCode 135.分发糖果
文章讲解:代码随想录
视频讲解:贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果_哔哩哔哩_bilibili
力扣题目:LeetCode 135.分发糖果
代码如下(Java):
class Solution {
public int candy(int[] ratings) {
int len = ratings.length;
int[] candyVec = new int[len];
candyVec[0] = 1;
for(int i = 1; i < len; i++){
candyVec[i] = (ratings[i] > ratings[i - 1]) ? candyVec[i - 1] + 1 : 1;
}
for(int i = len - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1]){
candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);
}
}
int ans = 0;
for(int num : candyVec){
ans += num;
}
return ans;
}
}