1005. K 次取反后最大化的数组和
class Solution {
private://将数组元素按绝对值从大到小排列static bool cmp(int a, int b) {return abs(a) > abs(b);}
public:int largestSumAfterKNegations(vector<int>& nums, int k) {//对数据进行排序sort(nums.begin(), nums.end(), cmp);int sum = 0;for (int i = 0; i<nums.size(); i++) {if(nums[i] < 0 && k > 0){nums[i] = -nums[i];k--;} }//剩下的加上if (k%2 == 1) {nums[nums.size()-1] *= -1;}for (int it: nums) {sum += it;}return sum;}
};
134. 加油站
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curSum = 0;//走完一圈之后还剩下多少int remain = 0;//开始的地方int start = 0;for (int i = 0; i < gas.size(); i++) {int cha = gas[i] - cost[i];curSum += cha;remain += cha;if (curSum < 0) {start = i+1; //选择新的起始点curSum = 0;//curSum清空}}//当油量 < 消耗时, 没有足够汽油走完全程if (remain < 0) return -1;return start;}
};
135. 分发糖果
class Solution {
public:int candy(vector<int>& ratings) {int n = ratings.size();int total = 0;vector<int> candyVec(n, 1);//从下标为1开始判断, 从左往右for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i-1]) candyVec[i] = candyVec[i-1] + 1;}//从右往左for (int i = n-2; i >= 0; i--) {if (ratings[i] > ratings[i+1]) candyVec[i] = max(candyVec[i], candyVec[i+1]+1);}//总和所需要的糖果数for (int it: candyVec) {total += it;}return total;}
};