- 1005.K次取反后最大化的数组和
```cpp
class Solution {
public:
static bool cmp(int a, int b) {
return abs(a) > abs(b);
}
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(), nums.end(), cmp);
for (int i = 0; i < nums.size(); i++) {
if (k && nums[i] < 0) {
nums[i] *= -1;
k--;
}
}
if (k % 2) nums[nums.size() - 1] *= -1;
int result = 0;
for (int i : nums) result += i;
return result;
}
};
```
- 134. 加油站
```cpp
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int totalSum = 0, curSum = 0, startIndex = 0;
for (int i = 0; i < gas.size(); i++) {
curSum += gas[i] - cost[i];
totalSum += gas[i] - cost[i];
if (curSum < 0) {
curSum = 0;
startIndex = i + 1;
}
}
if (totalSum < 0) return -1;
return startIndex;
}
};
```
- 135. 分发糖果
```cpp
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candies(ratings.size(), 1);
for (int i = 1; i < ratings.size(); i++) {
if (ratings[i] > ratings[i - 1]) candies[i] = candies[i - 1] + 1;
}
for (int i = ratings.size() - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]) candies[i] = max(candies[i + 1] + 1, candies[i]);
}
int result = 0;
for (int i : candies) {
result += i;
cout << "i=" << i << " ";
}
return result;
}
};
```