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();
}
}
标签:进阶,int,随想录,28,负数,数组,prices,翻转
From: https://www.cnblogs.com/hailicy/p/18332063