【Lintcode】993. Array Partition I

題目地址:

https://www.lintcode.com/problem/array-partition-i/description

給定一個長度爲2n2n的數組AA,要求將其分爲nn個數對(ai,bi)(a_i,b_i),其中i{1,2,...,n}i\in\{1,2,...,n\},使得i=1nmin(ai,bi)\sum_{i=1}^n\min(a_i,b_i)最大。返回這個最大的和。

從小到大排序後將第0,2,4,...,2n20,2,4,...,2n-2個數相加即可。代碼如下:

import java.util.Arrays;

public class Solution {
    /**
     * @param nums: an array
     * @return: the sum of min(ai, bi) for all i from 1 to n
     */
    public int arrayPairSum(int[] nums) {
        // Write your code here
        if (nums == null || nums.length == 0) {
            return 0;
        }
        
        int res = 0;
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i += 2) {
            res += nums[i];
        }
        
        return res;
    }
}

時間複雜度O(nlogn)O(n\log n),空間O(1)O(1)

算法正確性證明參考https://blog.csdn.net/qq_46105170/article/details/103776402

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