本题采用DP的方式(因为提示中建议采用DP)。其实完全可以采用sort+twoPoint的方式求解,也是一样的,反而时间复杂度要更加低一点。
class Solution {public: bool canPartition(vector<int>& nums) { int sum=0; for(int i=0;i<nums.size();i++) sum+=nums[i]; if(sum%2==1) return false; int half=sum/2; set<int> unique; for(int i=0;i<nums.size();i++) { set<int> newSet; for(set<int>::iterator it=unique.begin();it!=unique.end();it++) { newSet.insert(*it); newSet.insert(*it+nums[i]); } newSet.insert(nums[i]); unique.swap(newSet); if(unique.count(half)!=0) return true; } return false; }};新闻热点
疑难解答