目录
[题目链接:1005. K次取反后最大化的数组和](#题目链接:1005. K次取反后最大化的数组和)
[题目链接:134. 加油站](#题目链接:134. 加油站)
前言
踏平坎坷成大道,斗罢艰险又出发!
自律的尽头是自控,自控的尽头是硬控。
愿道友们披荆斩棘,终能得偿所愿。
简介
本人是小几年经验的前端开发,算法基础只有力扣几十道题,非常薄弱。
今天是个人的代码随想录算法硬控自己第22天,继续贪心。
贪心妙啊!
题目链接:1005. K次取反后最大化的数组和
javascript
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var largestSumAfterKNegations = function (nums, k) {
nums.sort((a, b) => a - b);
let res = 0, index = -1;
// 贪心思路:先由小到大处理负数,逐个变正
for (let i = 0; i < nums.length; i++) {
if (nums[i] < 0 && k > 0) {
nums[i] *= -1;
k--;
}
if (k <= 0) break;
}
// 如果k>0,那么此时nums里必定都是非负的
// 只需再从小到大排序且对第一个元素也就是最小值判断正负即可
if (k > 0) {
nums.sort((a, b) => a - b);
nums[0] = k % 2 === 1 ? -nums[0] : nums[0];
}
for (let i = 0; i < nums.length; i++) res += nums[i];
return res;
};
题目链接:134. 加油站
javascript
/**
* @param {number[]} gas
* @param {number[]} cost
* @return {number}
*/
var canCompleteCircuit = function (gas, cost) {
let currSum = 0, totalSum = 0, start = 0;
for (let i = 0; i < gas.length; i++) {
currSum += (gas[i] - cost[i]);
totalSum += (gas[i] - cost[i]);
if (currSum < 0) {
start = i + 1;
currSum = 0;
}
}
if (totalSum < 0) return -1;
return start;
};