美文网首页
LeetCode-561-数组拆分 I

LeetCode-561-数组拆分 I

作者: 阿凯被注册了 | 来源:发表于2020-10-27 08:51 被阅读0次

给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。


image.png

解题思路:

  1. 先排序,后取pair的前一个数;
  2. 桶排序,空间换时间

Python3代码:

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        # nums.sort()
        # ans = 0 
        # i = 0 
        # while i < len(nums):
        #     ans+= min(nums[i], nums[i+1])
        #     i += 2
        # return ans
        bucket = [0]* 20001
        for num in nums:
            bucket[num+10000] += 1
        i = 0
        res = 0
        while True:
            while i<20001 and bucket[i]==0:
                i += 1
            if i==20001:
                break
            res += i-10000  # 取前一个数
            bucket[i] -= 1
            while bucket[i] == 0:
                i += 1
            bucket[i] -= 1
        return res

相关文章

  • LeetCode-561-数组拆分 I

    给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ......

  • 数组拆分 I

    题目: 题目的理解: 将数组升序排列,取奇数位置的数之和。 python实现 提交 // END 英语是我的拦路虎...

  • 14、数组拆分 I

    1、题目如下 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b...

  • 2021.2.16每日一题

    561. 数组拆分 I[https://leetcode-cn.com/problems/array-partit...

  • 561. 数组拆分 I

    内容 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ...

  • word-break

    就用一个一维的 dp 数组,其中 dp[i] 表示范围 [0, i) 内的子串是否可以拆分,注意这里 dp 数组的...

  • 一起学算法-561. 数组拆分 I

    一、题目 LeetCode-561. 数组拆分 I地址:https://leetcode-cn.com/probl...

  • LeetCode刷题DAY 39: 数组拆分 I

    原文地址:LeetCode刷题DAY 39: 数组拆分 I[https://mp.weixin.qq.com/s?...

  • LeetCode题解之数组拆分 I

    数组拆分 I 题目描述 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (...

  • 领扣561. 数组拆分 I

    题目描述 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2)...

网友评论

      本文标题:LeetCode-561-数组拆分 I

      本文链接:https://www.haomeiwen.com/subject/fkgtmktx.html