这道题是LeetCode里的第1005道题。

题目描述:

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)

以这种方式修改数组后,返回数组可能的最大和。

示例 1:

输入:A = [4,2,3], K = 1
输出:5
解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。

示例 2:

输入:A = [3,-1,0,2], K = 3
输出:6
解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。

示例 3:

输入:A = [2,-3,-1,5,-4], K = 2
输出:13
解释:选择索引 (1, 4) ,然后 A 变为 [2,3,-1,5,4]。

提示:

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

题目意思很简单,就是求一个数组 K 次取反后的和,首先我们考虑怎么才能保证和为最大,第一步先判断是否有负数,第二步判断是否有 0 这个特殊值,然后再根据之前判断的不同情况来进行合适的取反。

解题代码:

import java.util.Arrays;class Solution {public int largestSumAfterKNegations(int[] A, int K) {Arrays.sort(A);//对数组进行排序int nega_num=0;//统计输注中负数的个数boolean has_zero=false;//记录数组中是否有0for(int num:A){//遍历数组直到正数时退出if(num<0)nega_num++;else if(has_zero==false&&num==0)has_zero=true;else break;}if(nega_num>=K){//如果负数多于Kfor(int i=0;i<K;i++){A[i]=(-A[i]);}}else{//负数小于K的情况int i=0;while(A[i]<0){A[i]=(-A[i]);i++;}if(has_zero==false&&(K-nega_num)%2==1){//是否有0以及取反次数进行几次?if(i==0)A[i]=-(A[i]);else{if(A[i-1]<=A[i])A[i-1]=-(A[i-1]);else A[i]=-(A[i]);}}}int sum=0;for(int i=0;i<A.length;i++)sum+=A[i];return sum;}
}

运行结果:

个人反省:

写的时候不小心造成了下标越界,当 i = 0 时,A[i-1]<=A[i] 的越界情况没有考虑到。对数组不太敏感。

转载于:https://www.cnblogs.com/1000sakura/p/10743297.html

【LeetCode】Maximize Sum Of Array After K Negations(K 次取反后最大化的数组和)相关推荐

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

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

  2. 数组索引必须为正整数或逻辑值是什么意思_贪心算法:K次取反后最大化的数组和...

    ❝ 很多录友都反馈昨天的题目:贪心算法:跳跃游戏II 很难,这样我就放心了,哈哈,因为我刚刚讲解贪心的时候一些录友会建议我:贪心没有必要单独讲,直接讲动规就可以了.应该不少同学都会感觉就贪心嘛,有啥难 ...

  3. 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划

    文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...

  4. postgresql 遍历字符串数组_每日一道编程题(348):1005.K次取反后最大化的数组和...

    1005.K次取反后最大化的数组和 每日编程中遇到任何疑问.意见.建议请公众号留言或直接撩Q474356284(备注每日编程) 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引  ...

  5. 贪心热门问题2:K 次取反后最大化的数组和

    我们说贪心算法很多解题思路是我们先看出来了,然后只是用代码实现而已,没有固定的套路.但是面试常考的贪心算法题目是非常有限的,因此我们的应对之道就是将常见的贪心题目都做一遍. 这个题就很典型: Leet ...

  6. 力扣1005. K 次取反后最大化的数组和(自定义排序)

    1005. K 次取反后最大化的数组和 自定义根据绝对值排序 class Solution {public int largestSumAfterKNegations(int[] nums, int ...

  7. LeetCode 1005. K 次取反后最大化的数组和

    1. 题目 给定一个整数数组 A,我们只能用以下方法修改该数组: 我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种 ...

  8. 149. Leetcode 1005. K 次取反后最大化的数组和 (贪心算法-基础题目)

    那么本题的解题步骤为: 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小 第二步:从前向后遍历,遇到负数将其变为正数,同时K-- 第三步:如果K还大于0,那么反复转变数值最小的元素,将 ...

  9. leetcode 1005. K 次取反后最大化的数组和 思考分析

    题目 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数 ...

最新文章

  1. 文档相似度之doc2vec、文档聚类
  2. 12层也能媲美ResNet?邓嘉团队提出最新力作ParNet,ImageNet top1精度直冲80.7%
  3. gitpythonapi_GitPython 使用基础
  4. linux bash 学习
  5. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法
  6. Windows保护模式学习笔记(十)—— TLB
  7. 自定义Java annotation及解析和使用
  8. 【超级详细的小白教程】Hexo 搭建自己的博客
  9. Webpack实战(四):教教你如何轻松搞定-预处理器(loader)
  10. mac 安装jdk_Mac安装rJava天坑
  11. axure8.0注册码
  12. 主成分分析(PCA)步骤及代码
  13. 【ORB_SLAM3源码解读】IMU基础介绍、IMU姿态、速度、位置解算以及误差方程、坐标系
  14. matlab画线段加箭头
  15. 图表点编辑数据无反应_word插入图表无法编辑数据
  16. 计算机二级安装64位的还是,判断电脑适合装64位还是32位系统需要cpu支持,很多人都搞错了!...
  17. 景深决定照相机什么特性_行政执法考试题库2017 2017摄影专业考试题库
  18. Linux信息收集常用脚本
  19. 网易云信短信接口java_短信接入示例
  20. 嵌入式系统概论-5-总线

热门文章

  1. 在HTML中哪个可以产生文本区,在下列的 HTML 中,哪个可以产生文本区(textarea)?
  2. 程序员面试怎么回答面试官:你对Spring的理解?
  3. 支付宝单笔提现功能实现
  4. 5G物联网网关智能物流无人车互联互通
  5. 高逼格关闭Win10防火墙
  6. c++第九次作业(谭浩强c++程序设计第三版P400习题)
  7. C++程序设计(第三版)谭浩强 编著 P400 习题5参考答案
  8. python做excel表格代码_python - 操作excel表格
  9. 共享经济时代,逸管家联合体集团引领中小企业走向辉煌
  10. 如何让一个沙雕学会窥觑别人存在你电脑浏览器的密码