示例代码 登录后复制 struct Cmp{ bool operator()(int a,int b){ return abs(a)>abs(b); } }; class Solution { public: int largestSumAfterKNegations(vector<int>& nums, int k) { int len=nums.size(); //第一步:按照数组绝对值从大到小进行排序 sort(nums.begin(),nums.end(),Cmp()); for(int i=0;i<len;i++){ //第二步:从前向后遍历,遇到负数将其变为正数,同时k-- if(nums[i]<0&&k){ nums[i]=-nums[i]; k--; } } //第三步:如果k还大于0反复转变数值最小的元素,将k用完 //剩余次数为奇数的时候(为偶数时可以互相抵消,不用处理) if(k%2){ nums[len-1]=-nums[len-1]; } //第四步:求和 int res=0; for(int num:nums){ res+=num; } return res; } }; 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31. 效果展示 原创作者: u_15305087 转载于: https://blog.51cto.com/u_15305087/11651308