LeetCode 1005 K次组饭后最大化的数组
这题贪的主要是数值最大化。如果K > 负数个数,我们就先将负数全部转换成它的相反数,并将K--,之后K剩余的值可以对2取模,为0的话直接得出最后结果,为的话我们要在当前所有值里取最小值,对其进行取反。如果K <= 负数个数,K用完直接结束,将数组累加即可。
代码如下:
class Solution { public int largestSumAfterKNegations(int[] nums, int k) { Arrays.sort(nums); int sum = 0; for (int i = 0; i < nums.length; i++) { if (k == 0) break; if (nums[i] < 0) { k--; nums[i] *= -1; } else break; } if (k > 0 && k % 2 == 1) { Arrays.sort(nums); nums[0] *= -1; } for (int i = 0; i < nums.length; i++) { sum += nums[i]; } return sum; } }
LeetCode 134 加油站
参考题解,仍需改进
class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int n = gas.length; int i = 0; while (i < n) { int sumOfGas = 0, sumOfCost = 0; int cnt = 0; while (cnt < n) { int j = (i + cnt) % n; sumOfGas += gas[j]; sumOfCost += cost[j]; if (sumOfCost > sumOfGas) { break; } cnt++; } if (cnt == n) { return i; } else { i = i + cnt + 1; } } return -1; } }
LeetCode 135 分发糖果
明天有时间再改改,今天没力气了
还没有评论,来说两句吧...