LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個長度為 2 * n 的整數數組。
你需要將 nums 分成 兩個 長度為 n 的數組,分別求出兩個數組的和,并 最小化 兩個數組和之 差的絕對值 。
nums 中每個元素都需要放入兩個數組之一。
請你返回 最小 的 數組和之差。
示例 1: 輸入:nums = [3,9,7,3] 輸出:2 解釋:最優分組方案是分成 [3,9] 和 [7,3] 。 數組和之差的絕對值為 abs((3 + 9) - (7 + 3)) = 2 。示例 2: 輸入:nums = [-36,36] 輸出:72 解釋:最優分組方案是分成 [-36] 和 [36] 。 數組和之差的絕對值為 abs((-36) - (36)) = 72 。示例 3: 輸入:nums = [2,-1,0,4,-2,-9] 輸出:0 解釋:最優分組方案是分成 [2,4,-9] 和 [-1,0,-2] 。 數組和之差的絕對值為 abs((2 + 4 + -9) - (-1 + 0 + -2)) = 0 。提示: 1 <= n <= 15 nums.length == 2 * n -10^7 <= nums[i] <= 10^7來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/partition-array-into-two-arrays-to-minimize-sum-difference
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 數組折半,分別對一半進行狀態枚舉
- 枚舉一邊取的數的個數,將左右的滿足二進制位個數的狀態取出,排序,雙指針求解最接近的
- 時間復雜度 O(n?2n)O(n*2^n)O(n?2n)
692 ms 76.4 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1773. 统计匹配检
- 下一篇: LeetCode 1826. 有缺陷的传