zoukankan      html  css  js  c++  java
  • [LeetCode] 561. Array Partition I

    Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possible.

    Example 1:

    Input: [1,4,3,2]
    
    Output: 4
    Explanation: n is 2, and the maximum sum of pairs is 4 = min(1, 2) + min(3, 4).
    

    Note:

    1. n is a positive integer, which is in the range of [1, 10000].
    2. All the integers in the array will be in the range of [-10000, 10000].

    Brute force solution's runtime will be too high when N is big. T(N) = (N - 1) * T(N - 2), where N is the length of the input array.

    Efficient Solution using sorting

     1 class Solution {
     2     public int arrayPairSum(int[] nums) {
     3         if(nums == null || nums.length == 0) {
     4             return 0;
     5         }
     6         Arrays.sort(nums);
     7         int sum = 0;
     8         for(int i = 0; i < nums.length; i = i + 2) {
     9             sum += nums[i];
    10         }
    11         return sum;
    12     }
    13 }

    Follow up question: 

    1. change the question to make the sum of all  max(ai, bi) as large as possible.

    2. change the question to make the sum of all max(ai, bi) as small as possible.

  • 相关阅读:
    表单实现仿淘宝搜索应用
    ASCII字符集
    HTTP状态码
    总结get和post区别
    总结Canvas和SVG的区别
    展示github中的页面(Github Pages)
    canvas的beginPath和closePath分析总结,包括多段弧的情况
    12. Integer to Roman
    13. Roman to Integer
    463. Island Perimeter
  • 原文地址:https://www.cnblogs.com/lz87/p/9941210.html
Copyright © 2011-2022 走看看