This is for 416. Partition Equal Subset Sum:
why does this boolean matrix gives time limit exceeded
#solution 1
class Solution {
public boolean canPartition(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
}
if(sum % 2 == 1){
return false;
}
sum = sum / 2;
int n = nums.length;
boolean memo [][] = new boolean[n + 1][sum + 1];
return knapsack(nums, sum, n, memo);
}
boolean knapsack(int nums[], int sum, int n, boolean memo[][]){
if(sum == 0){
return true;
}
if(n == 0){
return false;
}
if(memo[n][sum] == true){
return memo[n][sum];
}
if(nums[n - 1] > sum){
memo[n][sum] = knapsack(nums, sum, n - 1, memo);
}
else{
memo[n][sum] = knapsack(nums, sum - nums[n - 1] , n - 1, memo) || knapsack(nums, sum, n - 1, memo);
}
return memo[n][sum];
}
}how ever instead of boolean[][] Boolean[][] works fine
#solution 2
class Solution {
public boolean canPartition(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
}
if(sum % 2 == 1){
return false;
}
sum = sum / 2;
int n = nums.length;
Boolean memo [][] = new Boolean[n + 1][sum + 1];
return knapsack(nums, sum, n, memo);
}
boolean knapsack(int nums[], int sum, int n, Boolean memo[][]){
if(sum == 0){
return true;
}
if(n == 0){
return false;
}
if(memo[n][sum] != null){
return memo[n][sum];
}
if(nums[n - 1] > sum){
memo[n][sum] = knapsack(nums, sum, n - 1, memo);
}
else{
memo[n][sum] = knapsack(nums, sum - nums[n - 1] , n - 1, memo) || knapsack(nums, sum, n - 1, memo);
}
return memo[n][sum];
}
}Could anyone address this? this seems very strange to me.