作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/


题目地址:https://leetcode.com/problems/maximize-sum-of-array-after-k-negations/

题目描述

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

题目大意

对于一个由整数构成的数组A,每次翻转可以把其中的任意一位翻转成其相反数。要求一定要做K次翻转,但是可以翻转相同位置的数字,求翻转之后的数组的最大和。

解题方法

小根堆

这个题稍微一分析就知道:我们优先翻转负数翻转成正数,这样和就会变大。那么优先翻转哪个负数呢?肯定是最小的负数,这样求相反数之后会变得最大。那么,当负数翻转完了之后怎么办?那么只能翻转非负数了,所以如果有0就一直翻转0,否则就每次挑正数翻转成负数,翻转之后继续选负数翻转。

总而言之:维护一个最小堆,每次翻转堆里面的最小数字,翻转之后的结果仍然放入堆中以便下次翻转。

每次翻转之后和会增加二倍翻转的数字的相反数。所以,不要每次翻转之后都去求和,而应该在刚开始的时候求一次和就行。

Python代码如下:

class Solution(object):
def largestSumAfterKNegations(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: int
"""
_sum = sum(A)
heapq.heapify(A)
while K > 0:
curmin = heapq.heappop(A)
heapq.heappush(A, -curmin)
K -= 1
_sum += -curmin * 2;
return _sum

日期

2019 年 3 月 10 日 —— 周赛进了第一页!

【LeetCode】1005. Maximize Sum Of Array After K Negations 解题报告(Python)的更多相关文章

  1. Leetcode 1005. Maximize Sum Of Array After K Negations

    class Solution(object): def largestSumAfterKNegations(self, A, K): """ :type A: List[ ...

  2. 【leetcode】1005. Maximize Sum Of Array After K Negations

    题目如下: Given an array A of integers, we must modify the array in the following way: we choose an i an ...

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

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

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

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

  5. [Swift]LeetCode1005. K 次取反后最大化的数组和 | Maximize Sum Of Array After K Negations

    Given an array A of integers, we must modify the array in the following way: we choose an i and repl ...

  6. 【LeetCode】985. Sum of Even Numbers After Queries 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 找规律 日期 题目地址:https://lee ...

  7. LeetCode 653 Two Sum IV - Input is a BST 解题报告

    题目要求 Given a Binary Search Tree and a target number, return true if there exist two elements in the ...

  8. 【LeetCode】857. Minimum Cost to Hire K Workers 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/minimum- ...

  9. 【LeetCode】1019. Next Greater Node In Linked List 解题报告 (Python&C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 单调递减栈 日期 题目地址:https://leetc ...

随机推荐

  1. 【NCBI教程】资源汇总整理 (转载)

    主题 网址 备注 [NCBI教程]资源汇总整理 http://www.omicshare.com/forum/thread-200-1-1.html (出处: OmicShare Forum)

  2. UE4之Slate: App启动与最外层Runtime结构

    UE4版本:4.24.3源码编译: Windows10 + VS开发环境 Slate为一套自定义UI框架,其绘制直接依赖的是OpenGL.DirectX这样的硬件加速AIP;可以理解为一个单独的2D图 ...

  3. C#数字验证

    using System; using System.Collections; using System.Configuration; using System.Data; using System. ...

  4. A Child's History of England.2

    They made boats of basket-work, covered with the skins of animals, but seldom, if ever, ventured far ...

  5. acquire

    An acquired taste is an appreciation for something unlikely to be enjoyed by a person who has not ha ...

  6. 零基础学习java------day17------缓冲字节流,转换字节流,简化流,缓冲字符流,序列化和对象流

    1. 缓冲字节流 缓冲区:缓冲区实质上是一个数组.通常它是一个字节数组,但是也可以使用其他种类的数组.但是一个缓冲区不 仅仅 是一个数组.缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程 ...

  7. 零基础学习java------day7------面向对象

    1. 面向对象 1.1 概述 面向过程:c语言 面向对象:java :python:C++等等 面向对象的概念: (万物皆对象)------think in java   everything  in ...

  8. 3.5 Rust Generic Types, Traits, and Lifetimes

    Every programming language has tools for effectively handling the duplication of concepts. In Rust, ...

  9. electron搭建开发环境

    环境:windons10, nodev14.17.1, vscode md a_star cd a_star npm i -g yarn yarn config set ELECTRON_MIRROR ...

  10. Output of C++ Program | Set 2

    Predict the output of below C++ programs. Question 1 1 #include<iostream> 2 using namespace st ...