1005
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 (nums[i] < 0 && k > 0) {
nums[i] *= -1;
k--;
}
}
if (k % 2 == 1) nums[nums.size() - 1] *= -1;
int res = 0 ;
for(auto a : nums){
res += a;
}
return res;
}
};
134
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int res = -1;
int add = 0;
int cur_add = 0;
int start = 0;
for(int i = 0; i < gas.size(); i++){
add += gas[i] - cost[i];
cur_add += gas[i] - cost[i];
if(cur_add < 0){
start = i + 1;
cur_add = 0;
}
}
res = add >= 0 ? start : -1;
return res;
}
};
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int curSum = 0;
int min = INT_MAX; // 从起点出发,油箱里的油量最小值
int min_id = 0;
for (int i = 0; i < gas.size(); i++) {
int rest = gas[i] - cost[i];
curSum += rest;
if (curSum < min) {
min = curSum;
min_id = i;
}
}
if (curSum < 0) return -1;
if (min >= 0) return 0;
return min_id + 1; //亏空最严重的一个点必须放在最后一步走,等着前面剩余的救助
}
};
135
class Solution {
public:
int candy(vector<int>& ratings) {
int n = ratings.size();
vector<int> left(n);
for (int i = 0; i < n; i++) {
if (i > 0 && ratings[i] > ratings[i - 1]) {
left[i] = left[i - 1] + 1;
} else {
left[i] = 1;
}
}
int right = 0, ret = 0;
for (int i = n - 1; i >= 0; i--) {
if (i < n - 1 && ratings[i] > ratings[i + 1]) {
right++;
} else {
right = 1;
}
ret += max(left[i], right);
}
return ret;
}
};