成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

貪心算法:K次取反后最大化的數(shù)組和

開發(fā) 前端 算法
現(xiàn)在我們可以發(fā)現(xiàn)貪心的道理雖然簡單,但解決問題都很巧妙,難度上不照動規(guī)差多少。

 [[355496]]

很多錄友都反饋昨天的題目:貪心算法:跳躍游戲II 很難,這樣我就放心了,哈哈,因為我剛剛講解貪心的時候一些錄友會建議我:貪心沒有必要單獨講,直接講動規(guī)就可以了。應(yīng)該不少同學(xué)都會感覺就貪心嘛,有啥難的。現(xiàn)在我們可以發(fā)現(xiàn)貪心的道理雖然簡單,但解決問題都很巧妙,難度上不照動規(guī)差多少。

今天是一道簡單題,關(guān)鍵在于培養(yǎng)貪心的解題思路!

K次取反后最大化的數(shù)組和題目地址:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/

給定一個整數(shù)數(shù)組 A,我們只能用以下方法修改該數(shù)組:我們選擇某個索引 i 并將 A[i] 替換為 -A[i],然后總共重復(fù)這個過程 K 次。(我們可以多次選擇同一個索引 i。)

以這種方式修改數(shù)組后,返回數(shù)組可能的最大和。

示例 1:輸入:A = [4,2,3], K = 1

輸出:5

解釋:選擇索引 (1,) ,然后 A 變?yōu)?[4,-2,3]。

示例 2:

輸入:A = [3,-1,0,2], K = 3

輸出:6

解釋:選擇索引 (1, 2, 2) ,然后 A 變?yōu)?[3,1,0,2]。

示例 3:

輸入:A = [2,-3,-1,5,-4], K = 2

輸出:13

解釋:選擇索引 (1, 4) ,然后 A 變?yōu)?[2,3,-1,5,4]。

提示:

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

思路

本題思路其實比較好想了,如何可以讓 數(shù)組和 最大呢?

貪心的思路,局部最優(yōu):讓絕對值大的負(fù)數(shù)變?yōu)檎龜?shù),當(dāng)前數(shù)值達(dá)到最大,整體最優(yōu):整個數(shù)組和達(dá)到最大。

局部最優(yōu)可以推出全局最優(yōu)。

那么如果將負(fù)數(shù)都轉(zhuǎn)變?yōu)檎龜?shù)了,K依然大于0,此時的問題是一個有序正整數(shù)序列,如何轉(zhuǎn)變K次正負(fù),讓 數(shù)組和 達(dá)到最大。

那么又是一個貪心:局部最優(yōu):只找數(shù)值最小的正整數(shù)進(jìn)行反轉(zhuǎn),當(dāng)前數(shù)值可以達(dá)到最大(例如正整數(shù)數(shù)組{5, 3, 1},反轉(zhuǎn)1 得到-1 比 反轉(zhuǎn)5得到的-5 大多了),全局最優(yōu):整個 數(shù)組和 達(dá)到最大。

雖然這道題目大家做的時候,可能都不會去想什么貪心算法,一鼓作氣,就AC了。

「我這里其實是為了給大家展現(xiàn)出來 經(jīng)常被大家忽略的貪心思路,這么一道簡單題,就用了兩次貪心!」

那么本題的解題步驟為:

  • 第一步:將數(shù)組按照絕對值大小從大到小排序,「注意要按照絕對值的大小」
  • 第二步:從前向后遍歷,遇到負(fù)數(shù)將其變?yōu)檎龜?shù),同時K--
  • 第三步:如果K還大于0,那么反復(fù)轉(zhuǎn)變數(shù)值最小的元素,將K用完
  • 第四步:求和

對應(yīng)C++代碼如下:

  1. class Solution { 
  2. static bool cmp(int a, int b) { 
  3.     return abs(a) > abs(b); 
  4. public
  5.     int largestSumAfterKNegations(vector<int>& A, int K) { 
  6.         sort(A.begin(), A.end(), cmp);       // 第一步 
  7.         for (int i = 0; i < A.size(); i++) { // 第二步 
  8.             if (A[i] < 0 && K > 0) { 
  9.                 A[i] *= -1; 
  10.                 K--; 
  11.             } 
  12.         } 
  13.         while (K--) A[A.size() - 1] *= -1;  // 第三步  
  14.         int result = 0; 
  15.         for (int a : A) result += a;        // 第四步 
  16.         return result; 
  17.     } 
  18. }; 

總結(jié)

貪心的題目如果簡單起來,會讓人簡單到開始懷疑:本來不就應(yīng)該這么做么?這也算是算法?我認(rèn)為這不是貪心?

本題其實很簡單,不會貪心算法的同學(xué)都可以做出來,但是我還是全程用貪心的思路來講解。

因為貪心的思考方式一定要有!

「如果沒有貪心的思考方式(局部最優(yōu),全局最優(yōu)),很容易陷入貪心簡單題憑感覺做,貪心難題直接不會做,其實這樣就鍛煉不了貪心的思考方式了」。

所以明知道是貪心簡單題,也要靠貪心的思考方式來解題,這樣對培養(yǎng)解題感覺很有幫助。

 本文轉(zhuǎn)載自微信公眾號「代碼隨想錄」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系代碼隨想錄公眾號。

 

責(zé)任編輯:武曉燕 來源: 代碼隨想錄
相關(guān)推薦

2021-11-19 11:37:56

面試題數(shù)據(jù)結(jié)構(gòu)算法

2020-07-26 18:55:31

存儲緩存IT

2023-03-02 09:57:03

2011-12-08 10:10:57

私有云

2011-11-15 09:45:43

云計算云應(yīng)用

2013-05-14 13:28:37

利用大數(shù)據(jù)價值

2020-08-24 22:26:21

物聯(lián)網(wǎng)數(shù)據(jù)IOT

2017-10-18 11:14:02

容器虛擬機云平臺

2020-04-22 14:03:30

云服務(wù)云計算企業(yè)

2015-08-24 15:13:52

DevOps主機數(shù)據(jù)中心

2018-02-09 05:27:20

2009-07-21 08:29:05

Windows 7系統(tǒng)AeroSnapWindows 7系統(tǒng)

2013-05-08 10:03:52

創(chuàng)業(yè)設(shè)計設(shè)計思想設(shè)計

2012-07-11 22:27:21

惠普服務(wù)網(wǎng)絡(luò)

2014-07-30 09:40:22

OracleERP云SaaS

2016-04-12 10:02:22

2022-03-10 16:39:51

Kyligence數(shù)據(jù)湖OLAP

2011-07-20 13:23:48

SaaS云計算

2009-01-05 19:07:03

服務(wù)器虛擬化虛擬機

2023-10-18 11:01:07

GNOME按鈕
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美成人一级视频 | 青青草视频网站 | 黄色a视频 | 精品三区| 99久久精品免费 | 欧美一区视频 | 中文成人在线 | 日韩一级免费电影 | 日日摸天天添天天添破 | 日韩在线视频免费观看 | 国产日韩91 | 精品国产乱码一区二区三区a | 国产免费观看一级国产 | 真人毛片 | 国产精品毛片一区二区在线看 | 国产精久久久 | www.国产日本 | 国产精品99久久久久久久久久久久 | 97天天干| 久久蜜桃av一区二区天堂 | 欧美国产精品久久久 | 欧美精品一区二区三区在线 | 日韩欧美三区 | 午夜在线视频 | 91就要激情| 一区二区电影 | 青青草在线视频免费观看 | 日韩淫片免费看 | 黄色大片在线免费观看 | 欧美日韩不卡合集视频 | 欧美精选一区二区 | 日韩成人精品一区 | 人人人人干 | 91久久 | www.日韩欧美 | 国产精品亚洲一区二区三区在线 | 欧美日韩一| 综合久| 精品福利一区二区三区 | 亚洲精品在线免费 | 国产欧美一区二区三区在线看 |