海外百度云网站建设,wordpress 设置七牛,红岗网站建设,泰州网站建设搭建1005. K 次取反后最大化的数组和
这里说一下卡哥和我的区别#xff0c;基本思路是一样的#xff0c; 只是卡哥这里只需要一次排序#xff0c;而我这边排了两次#xff1b;
卡哥思路#xff1a;
1.按照绝对值大小从大到小排序
2.从前往后遍历#xff0c;遇到负数将其转…
1005. K 次取反后最大化的数组和
这里说一下卡哥和我的区别基本思路是一样的 只是卡哥这里只需要一次排序而我这边排了两次
卡哥思路
1.按照绝对值大小从大到小排序
2.从前往后遍历遇到负数将其转换为整数并k--
3.如果最后k还大于0且为奇数则减去2倍最小的数
4.求和
我的思路
1.从小到大排序
2.从前往后遍历求遍历值的和如果当前数为负数则增加其负数同时k--
3.如果最后k还大于0且为奇数再从小到大排序减去2倍最小的数
给你一个整数数组 nums 和一个整数 k 按以下方法修改该数组选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后返回数组 可能的最大和 。示例 1输入nums [4,2,3], k 1
输出5
解释选择下标 1 nums 变为 [4,-2,3] 。
示例 2输入nums [3,-1,0,2], k 3
输出6
解释选择下标 (1, 2, 2) nums 变为 [3,1,0,2] 。
示例 3输入nums [2,-3,-1,5,-4], k 2
输出13
解释选择下标 (1, 4) nums 变为 [2,3,-1,5,4] 。class Solution { //我的思路
public:int largestSumAfterKNegations(vectorint nums, int k) {sort(nums.begin(), nums.end());int res 0;for(int i 0; i nums.size(); i){if (nums[i] 0 and k 0){nums[i] - nums[i];k--;}res nums[i];}sort(nums.begin(), nums.end());if (k 0 and k % 2 1){res res - 2 * nums[0];}return res;}
};class Solution {
static bool cmp(int a, int b) {return abs(a) abs(b);
}
public:int largestSumAfterKNegations(vectorint A, int K) {sort(A.begin(), A.end(), cmp); // 第一步for (int i 0; i A.size(); i) { // 第二步if (A[i] 0 K 0) {A[i] * -1;K--;}}if (K % 2 1) A[A.size() - 1] * -1; // 第三步int result 0;for (int a : A) result a; // 第四步return result;}
}; 134. 加油站 135. 分发糖果