代码随想录算法训练营第28天 | 贪心进阶
2024年7月30日
题122. 买卖股票的最佳时机 II
上涨就买,下跌就不买。
class Solution {
public int maxProfit(int[] prices) {
int sum = 0;
for(int i=1;i<prices.length;i++){
sum+=prices[i]-prices[i-1]>0?prices[i]-prices[i-1]:0;
}
return sum;
}
}
题1005. K 次取反后最大化的数组和
首先看有多少负数,如果大于等于K,就将K个最小的负数翻转,否则翻转所有负数。然后再来考虑K,如果数组包含0,就直接返回,如果不包含,就再看剩余翻转次数是不是偶数,如果是偶数也直接返回,否则将此时最小的正数翻转。
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
//将数组排序
//最前面的就是最大的负数,优先翻转
Arrays.sort(nums);
//有多少负数
int negaNum=0;
for(int i=0;i<nums.length;i++){
if(nums[i]<0){
negaNum+=1;
}else{
break;
}
}
if(k<=negaNum){
for(int i=0;i<k;i++){
nums[i] = -nums[i];
}
}else{
for(int i=0;i<negaNum;i++){
nums[i] = -nums[i];
}
Arrays.sort(nums);
//看有没有0
for(int i:nums){
if(i==0){
return Arrays.stream(nums).sum();
}
}
//没有0就取最小的正数
k-=negaNum;
if(k%2==0){
return Arrays.stream(nums).sum();
}else{
nums[0] = -nums[0];
}
}
return Arrays.stream(nums).sum();
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步