LC 416. Partition Equal Subset Sum

Posted kykai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC 416. Partition Equal Subset Sum相关的知识,希望对你有一定的参考价值。

题目

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.

Note:

  1. Each of the array element will not exceed 100.
  2. The array size will not exceed 200.

Example 1:

Input: [1, 5, 11, 5]
Output: true
Explanation: The array can be partitioned as [1, 5, 5] and [11].

Example 2:

Input: [1, 2, 3, 5]
Output: false
Explanation: The array cannot be partitioned into equal sum subsets.

参考答案

 1 class Solution {
 2 public:
 3     bool canPartition(vector<int>& nums) {
 4         int sum = accumulate(nums.begin(),nums.end(),0); //首先对数组求和
 5         if( sum & 1 ){ // 如果数组是个奇数,那么不成立,因为例如: 5 = 2+3
 6             return false;
 7         }
 8         int half = sum / 2;
 9         std::sort(nums.begin(),nums.end(),std::greater<int>()); // 一定要加,否则time limit exceeded
10         return foo(nums,half,0); // 将 half 作为输入
11     }
12 
13     bool foo(vector<int>& nums, int half, int index){
14         for(int i = index ; i <nums.size() ; i++){ // 对于每一个数进行迭代
15             int h = half - nums[i]; // 对 half 扣除
16             if(h<0) return false; 
17             if(h==0) return true;
18             // 如果上述条件都不满足,说明nums[i] 没办法满足条件,那么需要继续找下一个数,
20        // 即index = i+1。满足即true,不满足就退回到上层,在这一层找下一个数。
19 if(foo(nums,h,i+1) == true) return true; 20 } 21 return false; 22 } 23 };

 

以上是关于LC 416. Partition Equal Subset Sum的主要内容,如果未能解决你的问题,请参考以下文章

416. Partition Equal Subset Sum

416 Partition Equal Subset Sum

416. Partition Equal Subset Sum

416. Partition Equal Subset Sum

Leetcode 416. Partition Equal Subset Sum

416. Partition Equal Subset Sum