题目

Given an array A of integers, we must modify the array in the following way: we choose an i and replace A[i] with -A[i], and we repeat this process K times in total. (We may choose the same index i multiple times.)

Return the largest possible sum of the array after modifying it in this way.

Example 1:

Input: A = [4,2,3], K = 1
Output: 5
Explanation: Choose indices (1,) and A becomes [4,-2,3].

Example 2:

Input: A = [3,-1,0,2], K = 3
Output: 6
Explanation: Choose indices (1, 2, 2) and A becomes [3,1,0,2].

Example 3:

Input: A = [2,-3,-1,5,-4], K = 2
Output: 13
Explanation: Choose indices (1, 4) and A becomes [2,3,-1,5,4].

Note:

  1. 1 <= A.length <= 10000
  2. 1 <= K <= 10000
  3. -100 <= A[i] <= 100

原题链接

解法一

class Solution {public int largestSumAfterKNegations(int[] A, int K) {java.util.Arrays.sort(A);int lenA = A.length;int lenB=0,lenC=0;int result;if(A[0]>=0){result = arraySum(A,1,lenA-1);if(K%2==0)result+=A[0];elseresult-=A[0];}else if(A[lenA-1]<=0){result = arraySum(A,K,lenA-1)-arraySum(A,0,1);}else{result=largestSumInBothPlusMinus(A,K);}return result;}public int largestSumInBothPlusMinus(int[] A, int K) {int result=0;int lenA = A.length; int start = 0;int end = A.length-1;int mid=(start+end)/2;int maxLessIndex=-1;while(mid>0&&mid+1<lenA){if(A[mid]<0){if(A[mid+1]<0){start=mid+1;mid=(mid+1+end)/2;if(mid==lenA-2){maxLessIndex=mid;break;}}else{maxLessIndex=mid;break;}}else{if(A[mid-1]>=0){end=mid-1;mid=(start+mid-1)/2;if(mid==0){maxLessIndex=mid;break;} }else{maxLessIndex=mid-1;break;}}}if(K<maxLessIndex+1){result=-arraySum(A,0,K-1)+arraySum(A,K,maxLessIndex)+arraySum(A,maxLessIndex+1,lenA-1);}else if(K==maxLessIndex+1){result=-arraySum(A,0,maxLessIndex)+arraySum(A,maxLessIndex+1,lenA-1);}else{result=-arraySum(A,0,maxLessIndex)+arraySum(A,maxLessIndex+2,lenA-1);int remainK =  K-maxLessIndex-1;if(remainK%2==0){result+=A[maxLessIndex+1];}else{if(-A[maxLessIndex]<A[maxLessIndex+1]){result=result+A[maxLessIndex+1]+2*A[maxLessIndex];}else{result-=A[maxLessIndex+1];}}}return result;}public int arraySum(int [] A, int start, int end){int sum = 0;for(int i=start;i<=end;i++){sum+=A[i];}return sum;}
}

解法二:简化求最大的小于0的值得坐标

class Solution {public int largestSumAfterKNegations(int[] A, int K) {java.util.Arrays.sort(A);int lenA = A.length;int lenB=0,lenC=0;int result;if(A[0]>=0){result = arraySum(A,1,lenA-1);if(K%2==0)result+=A[0];elseresult-=A[0];}else if(A[lenA-1]<=0){result = arraySum(A,K,lenA-1)-arraySum(A,0,1);}else{result=largestSumInBothPlusMinus(A,K);}return result;}public int largestSumInBothPlusMinus(int[] A, int K) {int maxLessIndex=-1;int result=0;int lenA=A.length;int i;for(i=0;i<lenA;i++){if(A[i]<0)continue;elsebreak;}maxLessIndex=i-1;if(K<maxLessIndex+1){result=-arraySum(A,0,K-1)+arraySum(A,K,maxLessIndex)+arraySum(A,maxLessIndex+1,lenA-1);}else if(K==maxLessIndex+1){result=-arraySum(A,0,maxLessIndex)+arraySum(A,maxLessIndex+1,lenA-1);}else{result=-arraySum(A,0,maxLessIndex)+arraySum(A,maxLessIndex+2,lenA-1);int remainK =  K-maxLessIndex-1;if(remainK%2==0){result+=A[maxLessIndex+1];}else{if(-A[maxLessIndex]<A[maxLessIndex+1]){result=result+A[maxLessIndex+1]+2*A[maxLessIndex];}else{result-=A[maxLessIndex+1];}}}return result;}public int arraySum(int [] A, int start, int end){int sum = 0;for(int i=start;i<=end;i++){sum+=A[i];}return sum;}
}

解法三:

class Solution {public int largestSumAfterKNegations(int[] A, int K) {java.util.Arrays.sort(A);int count=0;int sum=0;int lenA=A.length;int minNum=A[lenA-1];for(int i=0;i<lenA;i++){if(A[i]<0 && ++count<=K){A[i]=-A[i];}minNum=Math.min(A[i],minNum);sum+=A[i];}if(count>K || (K-count)%2==0){return sum;}else{return sum-2*minNum;}}
}

注意:if(A[i]<0 && ++count<=K)这里别写成了++count

转载于:https://www.cnblogs.com/shely-Wangfan/p/10506423.html

1005. Maximize Sum Of Array After K Negations相关推荐

  1. leetcode 1005 Maximize Sum Of Array After K Negations

    leetcode 1005 Maximize Sum Of Array After K Negations 1.题目描述 2.解题思路 3.Python代码 1.题目描述 给定一个整数数组 A,我们只 ...

  2. leetcode 1005. Maximize Sum Of Array After K Negations(python)

    描述 Given an array nums of integers, we must modify the array in the following way: we choose an i an ...

  3. LeetCode1005.Maximize Sum Of Array After K Negations(K 次取反后最大化的数组和)

    1005.Maximize Sum Of Array After K Negations(K 次取反后最大化的数组和) Description Difficulty: easy Example 1: ...

  4. 1005.E. Maximize Sum Of Array After K Negations

    一个数组每次选一个*(-1),K次后求最大sum. desc 思路: 1. 维护最小堆,either in place or not. 2. 细分析负数数量和K奇偶. K<=#负数:翻转最小的K ...

  5. LeetCode.1005-K次取负数组和最大(Maximize Sum Of Array After K Negations)

    这是悦乐书的第376次更新,第403篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第237题(顺位题号是1005).给定一个整数数组A,我们必须按以下方式修改数组:我们选 ...

  6. 【LeetCode】Maximize Sum Of Array After K Negations(K 次取反后最大化的数组和)

    这道题是LeetCode里的第1005道题. 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次. ...

  7. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

  8. 【预训练视觉-语言模型文献阅读文献阅读】最新BERT模型——UNITER: UNiversal Image-TExt Representation Learning

    [预训练视觉-语言模型文献阅读文献阅读]最新BERT模型--UNITER: UNiversal Image-TExt Representation Learning 文章目录 [预训练视觉-语言模型文 ...

  9. 代码随想录——回溯算法

    目录 一.回溯法理论基础 二.组合问题 三.子集问题 四.分割问题 五.排列问题 六.行程问题 七.棋盘问题 一.回溯法理论基础 回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历 ...

  10. 【解题思路】20190729暑假第二次练习

    第一题:统计单词数 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.     现在,请你变成实现这一功能,具体要求是:给定一个单 ...

最新文章

  1. 转:Silverlight样式写法
  2. 每天一个linux命令-touch
  3. Java基础入门(一):Java里面的时间
  4. 标准错误处理机制——error
  5. 前端学习(2223):react之jsx的样式和注释(2)
  6. SQLServer数据库,表内存,实例名分析SQL语句
  7. 使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm
  8. IBM Lotus Domino V8.5 服务器管理入门手册
  9. 用 iOS-System-Services 框架获取iOS设备所用的设备信息
  10. 编译原理中:短语,直接短语,句柄
  11. Atitit nodejs js 获取图像分辨率 尺寸 大小 宽度 高度
  12. 【软件相关】LabView使用总结
  13. python在财务中的应用实训报告-数据科学与大数据技术专业实训解决方案
  14. amd支持服务器内存,AMD专用内存为什么只能在AMD平台使用?与普通内存有什么区别?...
  15. 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
  16. 计算机网络基础与应用复习提纲,计算机网络及应用期末复习提纲
  17. 夜光:Java成神之路(二)擅长的语言
  18. C4D 21版 安装好一打开就闪退,查了好久
  19. 营收净利双双“滑坡”,华米科技离“独立”还有多远?
  20. discuz mysql类_Discuz论坛教程之数据库操作DB类和C::t类介绍

热门文章

  1. Swagger 教程
  2. mysql数据库视图_MySQL数据库8(二十)视图
  3. kafka面试题简答
  4. Dediprog EM100Pro-G2 安装与配置教程
  5. Laravel 数据库配置
  6. 无边框对话框拖动改变大小的实现总结
  7. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (三)Nginx负载均衡配置...
  8. C# async/await 使用总结
  9. ios学习路线_OC基础语法
  10. 细说PHP:人人都能玩转PHP和MySQL Web开发