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();
}
}