那么本题的解题步骤为:
这个题的sort部分写法不会进行绝对值排序;
- class Solution {
-
- 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);
- for( int i = 0; i< nums.size(); i++) {
- if (nums[i] < 0 && k > 0){
- nums[i] = -nums[i];
- k--;
- }
- }
- sort(nums.begin(), nums.end());
- while (k > 0) {
- nums[0] = - nums[0];
- k--;
- }
- int result = 0;
- for (int j = 0; j < nums.size(); j++){
- result += nums[j];
- }
- return result;
- }
- };
首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。
- class Solution {
- public:
- int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
- //vector
rest();这么写不对,因为定义了一个vector但是没往里面插入数,所以下面会接触空vector - vector<int> rest(gas.size());
- int current_sum = 0;
- int start_position = 0;
- int total_sum = 0;
- for (int i = 0; i < gas.size(); i++) {
- rest[i] = gas[i] - cost[i];
- total_sum += rest[i];
- }
-
- if (total_sum < 0) return -1;
-
- for( int j = 0; j < rest.size(); j++) {
- current_sum += rest[j];
- if (current_sum <0) {
- start_position = j+1;
- current_sum = 0;
- }
- }
- return start_position;
- }
- };
- class Solution {
- public:
- int candy(vector<int>& ratings) {
- vector<int> candy_number(ratings.size(), 1);
- for (int i = 1; i < ratings.size(); i++) { //注意这句要从1开始
- if (ratings[i] > ratings[i - 1]) candy_number[i] = candy_number[i -1] + 1;
- }
- for (int i = ratings.size() - 2; i >= 0; i--) { //注意这句从减2开
- if (ratings[i] > ratings[i + 1]) candy_number[i] = max(candy_number[i], candy_number[i + 1] + 1);
- }
-
- int result = 0;
- for (int i = 0; i < candy_number.size(); i++ ){
- result += candy_number[i];
- }
- return result;
- }
- };