classSolution{publicintlargestSumAfterKNegations(int[] nums,int k){if(nums.length ==1)return k %2==0? nums[0]:-nums[0];Arrays.sort(nums);int sum =0;int index =0;for(int i =0; i < k; i++){if(i < nums.length -1&& nums[index]<0){
nums[index]=-nums[index];if(nums[index]>=Math.abs(nums[index +1])) index++;continue;}
nums[index]=-nums[index];}for(int i =0; i < nums.length; i++){
sum += nums[i];}return sum;}}classSolution{publicintlargestSumAfterKNegations(int[]A,intK){if(A.length ==1)returnK%2==0?A[0]:-A[0];Arrays.sort(A);int sum =0;int idx =0;for(int i =0; i <K; i++){//不取最后一个位置,因为最后一个位置是最大的if(i <A.length -1&&A[idx]<0){A[idx]=-A[idx];if(A[idx]>=Math.abs(A[idx +1])) idx++;//跳出循环后,由于idx已经++,则再次进入for时,判断的就是下一个位置了continue;}//如果发现没有值是小于0的了,则为了实现k次取反,只能操作当前的值(将当前的值取反) A[idx]=-A[idx];}//统计sumfor(int i =0; i <A.length; i++){
sum +=A[i];}return sum;}}
思路原题链接第一步:将数组从小到大排序,这样最小值就是在最前面第二步:从前向后遍历,遇到负数将其变为正数,判断这个值(最小值)后面的一个数是不是较小,若是则将idx++第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完第四步:求和class Solution { public int largestSumAfterKNegations(int[] A, int K) { if(A.length == 1) return K % 2 == 0 ? A[0] :