1005.K次取反后最大化的数组和
我的思路是先将数组从小到大进行排序,然后变化正反,再排序,始终变化第一个数。
class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int res = 0;
for(int j = 0;j < nums.size();j++){
res+=nums[j];
}
for(int i = 0; i < k;i++){
res -= 2*nums[0];
nums[0] = -nums[0];
sort(nums.begin(),nums.end());
}
return res;
}
};
代码随想录上的方法是
非常的巧妙了!
134. 加油站
这到题目的第二个例子就算是提示了,一直到gas[i] > cost[i]才有可能有解。
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int res = 0;
int totalSum = 0;
int curSum = 0;
for (int i = 0; i < gas.size() ; i++){
curSum += gas[i] - cost [i];
totalSum += gas[i] - cost [i];
if(curSum < 0) {res = i+1; curSum = 0;}
}
if (totalSum < 0) return -1;
return res;
}
};
还是逻辑上的问题,想明白了就好了