学网站开发要下载哪些软件,运城 网站 建设 招聘,信誉好的丹阳网站建设,推销网站建设具备哪些知识题目#xff1a; 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果 学习内容#xff1a;
1005.K次取反后最大化的数组和
这道题要分为两步#xff0c;首先对数组进行排序#xff0c;然后对其中的负数取反。如果这时候k还没有消耗完#xff0c;就对处理后的数组再…题目 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果 学习内容
1005.K次取反后最大化的数组和
这道题要分为两步首先对数组进行排序然后对其中的负数取反。如果这时候k还没有消耗完就对处理后的数组再排序如果k是偶数那正常返回数组和如果k是奇数那么返回max-num[0]-num[0]。
class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);for (int i 0; i nums.length; i) {if (nums[i] 0 k 0) {nums[i] -nums[i];k--;}}Arrays.sort(nums);int max 0;for (int i 0; i nums.length; i) {max nums[i];}if (k % 2 0) {return max;}return max - nums[0] - nums[0];}
}134. 加油站
class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int curSum 0; // 当前剩余油量int totalSum 0; // 总油量int start 0; // 出发加油站索引for (int i 0; i gas.length; i) {curSum gas[i] - cost[i];totalSum gas[i] - cost[i];if (curSum 0) {start i 1;curSum 0;}}if (totalSum 0) return -1;return start;}
}135. 分发糖果
这道题由于要考虑相邻的孩子但是同时考虑左右容易造成混乱。因此我们分为两步第一步是从前往后遍历只考虑当前孩子和左边孩子的关系如果当前元素孩子大就在左孩子的糖基础上加1。第二步是从后往前遍历只考虑当前孩子和右边孩子的关系。
class Solution {public int candy(int[] ratings) {int len ratings.length;int[] candyVec new int[len];candyVec[0] 1;for (int i 1; i len; i) {if (ratings[i] ratings[i - 1]) {candyVec[i] candyVec[i - 1] 1;} else {candyVec[i] 1;}}for (int i len - 2; i 0; i--) {if (ratings[i] ratings[i 1]) {candyVec[i] Math.max(candyVec[i], candyVec[i 1] 1);}}int sum 0;for (int i 0; i len; i) {sum candyVec[i];}return sum;}
}学习时间
2024.4.15