K次取反後最大化的陣列和

2021-10-21 13:54:04 字數 780 閱讀 4282

題目鏈結

給定乙個整數陣列 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]。

1 <= a.length <= 10000

1 <= k <= 10000

-100 <= a[i] <= 100

將元素按絕對值排序,從大到小遍歷,當前k不為0且當前數為負則取反,剩下的k > 0且為奇數就對最小的數取反 再累加

static

bool

cmp(

int a,

int b)

intlargestsumafterknegations

(vector<

int>

& a,

int k)

}//k為奇數,把絕對值最小的數取反

if(k%2)

a[0]

=-a[0]

;for

(auto it : a)

return result;

}

1005 k次取反後最大化的陣列和

貪心 如果陣列有負元素的話,自然優先把負變為正,且最優先的是最小負值 即絕對值最大的元素 如果陣列所有元素都為正了,k仍沒用完,就全用在尾元素上 為了最大限度的減小損失,應該優先把最小正值變為負,同樣如果變了一次之後尾元素變為負,如果k還沒用完那自然應該把尾元素變回正,因此應該把剩餘的k全用在尾元素...

Leetcode1005K 次取反後最大化的陣列和

思路 使總和最大,最大應該是再需要操作的次數k條件下 負數變為正數符號不變。負數數目n neg 正數數目n pos。負數提取形成乙個序列s1 正數乙個序列 正數序列求和s2 k a 負數從小到大排序,排在前面絕對值反而大 s1 前k個絕對值求和 k 1 最後 直接求和 k a 負數序列取絕對值求和s...

最大子序和,K 次串聯後最大子陣列之和

題目 最大子序和 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。自己做的結果 int fun int arr int i,int j 給陣...