东丽集团网站建设,合肥大型网站开发公司,网络管理系统的配置管理最主要的功能是,南京cms模板建站文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析#xff1a;本题允许某个下标的数字多次翻转#xff0c;因此思路比较简单。首先#xff0c;我们要求最大和… 文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析本题允许某个下标的数字多次翻转因此思路比较简单。首先我们要求最大和正数一般不去反转而是将负数全部翻转过来如果翻转次数还有剩下那么就将绝对值最小的那个数翻转。程序当中利用了sort函数的重载根据比较函数的不同对元素进行排序这里是绝对值降序排列sort函数的头文件是algorithm。 程序如下
class Solution {
static bool cmp(int a, int b) {return abs(a) abs(b);
}
public:int largestSumAfterKNegations(vectorint nums, int k) {sort(nums.begin(), nums.end(), cmp);for (int i 0; i nums.size(); i) {if (nums[i] 0 k0) {nums[i] * -1; k--;}}if (k % 2 1) nums[nums.size() - 1] * -1;int sum 0;for (int a : nums) sum a;return sum;}
};复杂度分析
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)。空间复杂度 O ( 1 ) O(1) O(1)。
三、完整代码
# include iostream
# include vector
# include algorithm
using namespace std;class Solution {
static bool cmp(int a, int b) {return abs(a) abs(b);
}
public:int largestSumAfterKNegations(vectorint nums, int k) {sort(nums.begin(), nums.end(), cmp);for (int i 0; i nums.size(); i) {if (nums[i] 0 k0) {nums[i] * -1; k--;}}if (k % 2 1) nums[nums.size() - 1] * -1;int sum 0;for (int a : nums) sum a;return sum;}
};int main() {vectorint nums { 2,-3,-1,5,-4 };int k 2; Solution s1;int result s1.largestSumAfterKNegations(nums, k);cout result endl;system(pause);return 0;
}end