package pep.Day86;
public class LeetCode_416_Partition_Equal_Subset_Sum {
public static void main(String[] args) {
int[] nums = {1, 5, 11, 5};
System.out.println(canPartition(nums));
}
public static boolean canPartition(int[] nums) {
int sum = 0;
int n = nums.length;
for (int num : nums) {
sum += num;
}
if (sum % 2 != 0 || n == 1) {
return false;
}
return isSubsetSum_1D(n, nums, sum / 2);
}
// METHOD 1- Using 2D Array
public static boolean isSubsetSum(int n, int arr[], int sum) {
boolean[][] dp = new boolean[n + 1][sum + 1];
for (int i = 0; i <= n; i++) {
for (int tar = 0; tar <= sum; tar++) {
if (tar == 0)
dp[i][tar] = true;
else if (i == 0)
dp[i][tar] = false;
else {
// sirf isse case me element ko consider krenge
if (tar - arr[i - 1] >= 0) {
// item ko nhi lete hain
if (dp[i - 1][tar])
dp[i][tar] = dp[i - 1][tar];
// item ko lete hain
else if (dp[i - 1][tar - arr[i - 1]])
dp[i][tar] = dp[i - 1][tar - arr[i - 1]];
} else {
// exclude wala case
dp[i][tar] = dp[i - 1][tar];
}
}
}
}
return dp[n][sum];
}
// METHOD 2- Using 1D Array
public static boolean isSubsetSum_1D(int n, int arr[], int sum) {
boolean[] dp = new boolean[sum + 1];
dp[0] = true;
for (int num : arr) {
for (int tar = sum; tar > 0; tar--) {
if (tar - num >= 0)
dp[tar] = dp[tar - num] || dp[tar];
}
if (dp[sum] == true)
return dp[sum];
}
return dp[sum];
}
}
Saturday, July 2, 2022
Leet Code 416. Partition Equal Subset Sum
Subscribe to:
Post Comments (Atom)
Diagonal Traversal
eg. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Output: 1 6 11 16 2 7 12 3 8 4 Approach:...
-
https://leetcode.com/problems/reverse-integer/description/ Integer.MAX_VALUE = 2,147,483,647 = 2 31 - 1 Integer.MIN_VALUE = -2,147,483,64...
-
https://leetcode.com/problems/two-sum/description/ Given the constraints: 2 <= nums.length <= 10⁴ -10⁹ <= nums[i] <= 10⁹ -10...
-
For this particular question, we only have the In - region. So, the code looks like : package pep.Day7 ; public class TowerOfHanoi { p...




No comments:
Post a Comment