本題采用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; }};新聞熱點
疑難解答