Leetcode - Partition Equal Subset Sum
public class Solution {
public boolean canPartition(int[] nums) {
if (nums.length == 0) {
return true;
}
int sum = 0;
for (int num : nums) {
sum += num;
}
if (sum % 2 != 0) {
return false;
}
sum = sum / 2;
boolean[] dp = new boolean[sum + 1];
dp[0] = true;
for (int i = 1; i <= nums.length; i++) {
for (int j = sum; j >= nums[i - 1]; j--) {
dp[j] |= dp[j - nums[i - 1]];
}
}
return dp[sum];
}
}
reference: https://discuss.leetcode.com/topic/62312/java-solution-similar-to-backpack-problem-easy-to-understand
먼저, sum of total array should be even 그 다음, 이러한 파티션이 존재한다면 각 파티션의 합은 반드시sum/2
그 다음에 우리는subset과 유사한 방법으로 그 그룹의partition이 존재하는지 여부를 구할 수 있다. 그들의 합은sum/2이다. 만약에 존재한다면 반드시 다른 그룹의partition이 이에 대응하고 또는sum/2이기도 하다.
그래서 dp로 이 문제를 해결한다.그리고 우리의 목적은sum/2이기 때문에 그는 상한선이다. 어떤 >sum/2의 서열이든 우리는 흥미가 없다. 처음에 우리는nums[0]를 넣고nums[0],nums[1],nums[0]+nums[1](assume they are all<=sum/2)nums[0],nums[1],nums[0],nums[0]+nums[1],nums[2],nums[2],nums[1],nums[2],nums[1],nums[1][2],nums[1],nums[02]를 넣는다.
마지막으로, 우리는 dp[sum/2]가true인지 아닌지를 구해야 한다
Anyway, Good luck, Richardo! -- 10/13/2016
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.