LeetCode 1005 K 次取反後最大化的數組和(java版)

給定一個整數數組 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]。

Java版

  class Solution {
         public int largestSumAfterKNegations(int[] A, int K) {
             Arrays.sort(A);//排序,從小到大,如果有負數一次進行反轉
     		for (int i = 0; i < A.length; i++) {
     			if (K > 0 && A[i] < 0) {
     				A[i] = -A[i];
     				K--;
     			}
     		}
     		//如果k=0,說明所有的翻轉完了,有剩餘說明所有的負數都翻轉完了,接下來翻轉的是正數了
     		if(K!=0){
     			Arrays.sort(A);//再一次進行排序
     			if(K%2==1){   
     				A[0] = -A[0];
     			}
     		}
     		int num = 0;
     		for (int i = 0; i < A.length; i++) {
     			num += A[i];
     		}
     		System.out.println(num);
     		return num;
         }
     }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章