刷題416. Partition Equal Subset Sum

一、題目說明

題目416. Partition Equal Subset Sum,給定一個只包含正整數的數組,判斷數組能否分成2個子數組,且其和相等。難度是Medium!

二、我的解答

這個題目,類似揹包問題,用遞歸算法可解。但是需要先降序排序。

class Solution{
	public:
		bool canPartition(vector<int>& nums){
			int sum = 0;
			int len = nums.size();
			
			for(int i=0;i<len;i++){
				sum += nums[i];
			}
			
			//如果和是奇數,不能分成2部分 
			if(sum%2 !=0) return false;
			
			sort(nums.begin(),nums.end(),greater<int>());
			
			sum = sum/2;
			return dfs(nums,sum,0);
		}
		bool dfs(vector<int>& nums,int sum,int index){
			if(index >= nums.size() || nums[index] > sum){
				return false;
			}
			if(nums[index] == sum){
				return true;
			}
			return dfs(nums,sum-nums[index],index+1) || dfs(nums,sum,index+1);
		}		 
};

性能如下:

Runtime: 0 ms, faster than 100.00% of C++ online submissions for Partition Equal Subset Sum.
Memory Usage: 8.5 MB, less than 76.47% of C++ online submissions for Partition Equal Subset Sum.

三、優化措施

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章