diff --git a/README.md b/README.md index 28f61e46c..bda20fde6 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' |-|-|-|-|-|- | 0334 |[Increasing Triplet Subsequence](src/main/java/g0301_0400/s0334_increasing_triplet_subsequence/Solution.java)| Medium | Array, Greedy | 2 | 99.33 | 0238 |[Product of Array Except Self](src/main/java/g0201_0300/s0238_product_of_array_except_self/Solution.java)| Medium | Top_100_Liked_Questions, Array, Prefix_Sum, Big_O_Time_O(n^2)_Space_O(n) | 1 | 99.66 -| 0560 |[Subarray Sum Equals K](src/main/java/g0501_0600/s0560_subarray_sum_equals_k/Solution.java)| Medium | Top_100_Liked_Questions, Array, Hash_Table, Prefix_Sum, Big_O_Time_O(n)_Space_O(n) | 21 | 98.97 +| 0560 |[Subarray Sum Equals K](src/main/java/g0501_0600/s0560_subarray_sum_equals_k/Solution.java)| Medium | Top_100_Liked_Questions, Array, Hash_Table, Prefix_Sum, Big_O_Time_O(n)_Space_O(n) | 22 | 95.17 #### Day 6 String @@ -102,7 +102,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- | 0290 |[Word Pattern](src/main/java/g0201_0300/s0290_word_pattern/Solution.java)| Easy | String, Hash_Table | 1 | 97.26 -| 0763 |[Partition Labels](src/main/java/g0701_0800/s0763_partition_labels/Solution.java)| Medium | String, Hash_Table, Greedy, Two_Pointers, Big_O_Time_O(n)_Space_O(1) | 1 | 100.00 +| 0763 |[Partition Labels](src/main/java/g0701_0800/s0763_partition_labels/Solution.java)| Medium | String, Hash_Table, Greedy, Two_Pointers, Big_O_Time_O(n)_Space_O(1) | 2 | 100.00 #### Day 8 String @@ -197,7 +197,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- | 0215 |[Kth Largest Element in an Array](src/main/java/g0201_0300/s0215_kth_largest_element_in_an_array/Solution.java)| Medium | Top_100_Liked_Questions, Top_Interview_Questions, Array, Sorting, Heap_Priority_Queue, Divide_and_Conquer, Quickselect, Big_O_Time_O(n\*log(n))_Space_O(log(n)) | 5 | 70.82 -| 0347 |[Top K Frequent Elements](src/main/java/g0301_0400/s0347_top_k_frequent_elements/Solution.java)| Medium | Top_100_Liked_Questions, Array, Hash_Table, Sorting, Heap_Priority_Queue, Counting, Divide_and_Conquer, Quickselect, Bucket_Sort, Big_O_Time_O(n\*log(n))_Space_O(k) | 9 | 97.93 +| 0347 |[Top K Frequent Elements](src/main/java/g0301_0400/s0347_top_k_frequent_elements/Solution.java)| Medium | Top_100_Liked_Questions, Array, Hash_Table, Sorting, Heap_Priority_Queue, Counting, Divide_and_Conquer, Quickselect, Bucket_Sort, Big_O_Time_O(n\*log(n))_Space_O(k) | 9 | 97.30 #### Day 21 Heap Priority Queue @@ -345,7 +345,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 0438 |[Find All Anagrams in a String](src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n+m)_Space_O(1) | 6 | 99.03 +| 0438 |[Find All Anagrams in a String](src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n+m)_Space_O(1) | 3 | 99.83 | 0713 |[Subarray Product Less Than K](src/main/java/g0701_0800/s0713_subarray_product_less_than_k/Solution.java)| Medium | Array, Sliding_Window | 8 | 39.00 | 0209 |[Minimum Size Subarray Sum](src/main/java/g0201_0300/s0209_minimum_size_subarray_sum/Solution.java)| Medium | Array, Binary_Search, Prefix_Sum, Sliding_Window | 1 | 100.00 @@ -433,7 +433,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 1143 |[Longest Common Subsequence](src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n\*m)_Space_O(n\*m) | 33 | 46.23 +| 1143 |[Longest Common Subsequence](src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n\*m)_Space_O(n\*m) | 19 | 89.05 | 0583 |[Delete Operation for Two Strings](src/main/java/g0501_0600/s0583_delete_operation_for_two_strings/Solution.java)| Medium | String, Dynamic_Programming | 12 | 79.10 #### Day 18 Dynamic Programming @@ -825,7 +825,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- | 0392 |[Is Subsequence](src/main/java/g0301_0400/s0392_is_subsequence/Solution.java)| Easy | String, Dynamic_Programming, Two_Pointers | 1 | 93.01 -| 1143 |[Longest Common Subsequence](src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n\*m)_Space_O(n\*m) | 33 | 46.23 +| 1143 |[Longest Common Subsequence](src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n\*m)_Space_O(n\*m) | 19 | 89.05 | 0072 |[Edit Distance](src/main/java/g0001_0100/s0072_edit_distance/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n^2)_Space_O(n2) | 3 | 97.19 #### Day 20 @@ -980,7 +980,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 0739 |[Daily Temperatures](src/main/java/g0701_0800/s0739_daily_temperatures/Solution.java)| Medium | Top_100_Liked_Questions, Array, Stack, Monotonic_Stack, Big_O_Time_O(n)_Space_O(n) | 10 | 94.99 +| 0739 |[Daily Temperatures](src/main/java/g0701_0800/s0739_daily_temperatures/Solution.java)| Medium | Top_100_Liked_Questions, Array, Stack, Monotonic_Stack, Big_O_Time_O(n)_Space_O(n) | 8 | 96.83 | 0058 |[Length of Last Word](src/main/java/g0001_0100/s0058_length_of_last_word/Solution.java)| Easy | String | 0 | 100.00 #### Day 7 @@ -1022,7 +1022,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 0438 |[Find All Anagrams in a String](src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n+m)_Space_O(1) | 6 | 99.03 +| 0438 |[Find All Anagrams in a String](src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n+m)_Space_O(1) | 3 | 99.83 | 0713 |[Subarray Product Less Than K](src/main/java/g0701_0800/s0713_subarray_product_less_than_k/Solution.java)| Medium | Array, Sliding_Window | 8 | 39.00 #### Day 13 @@ -1354,7 +1354,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 0438 |[Find All Anagrams in a String](src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n+m)_Space_O(1) | 6 | 99.03 +| 0438 |[Find All Anagrams in a String](src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n+m)_Space_O(1) | 3 | 99.83 | 0424 |[Longest Repeating Character Replacement](src/main/java/g0401_0500/s0424_longest_repeating_character_replacement/Solution.java)| Medium | String, Hash_Table, Sliding_Window | 5 | 95.15 #### Day 13 Hashmap @@ -1369,7 +1369,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- | 0844 |[Backspace String Compare](src/main/java/g0801_0900/s0844_backspace_string_compare/Solution.java)| Easy | String, Two_Pointers, Stack, Simulation | 0 | 100.00 -| 0394 |[Decode String](src/main/java/g0301_0400/s0394_decode_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Stack, Recursion, Big_O_Time_O(n)_Space_O(n) | 1 | 87.68 +| 0394 |[Decode String](src/main/java/g0301_0400/s0394_decode_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Stack, Recursion, Big_O_Time_O(n)_Space_O(n) | 0 | 100.00 #### Day 15 Heap @@ -1427,8 +1427,8 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 0543 |[Diameter of Binary Tree](src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java)| Easy | Top_100_Liked_Questions, Depth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 1 | 65.86 -| 0437 |[Path Sum III](src/main/java/g0401_0500/s0437_path_sum_iii/Solution.java)| Medium | Depth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 18 | 45.66 +| 0543 |[Diameter of Binary Tree](src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java)| Easy | Top_100_Liked_Questions, Depth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 0 | 100.00 +| 0437 |[Path Sum III](src/main/java/g0401_0500/s0437_path_sum_iii/Solution.java)| Medium | Depth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 2 | 100.00 #### Day 8 Binary Search @@ -1470,7 +1470,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | | | | | | |-|-|-|-|-|- -| 0416 |[Partition Equal Subset Sum](src/main/java/g0401_0500/s0416_partition_equal_subset_sum/Solution.java)| Medium | Top_100_Liked_Questions, Array, Dynamic_Programming, Big_O_Time_O(n\*sums)_Space_O(n\*sums) | 27 | 94.53 +| 0416 |[Partition Equal Subset Sum](src/main/java/g0401_0500/s0416_partition_equal_subset_sum/Solution.java)| Medium | Top_100_Liked_Questions, Array, Dynamic_Programming, Big_O_Time_O(n\*sums)_Space_O(n\*sums) | 6 | 99.66 | 0152 |[Maximum Product Subarray](src/main/java/g0101_0200/s0152_maximum_product_subarray/Solution.java)| Medium | Top_100_Liked_Questions, Top_Interview_Questions, Array, Dynamic_Programming, Big_O_Time_O(N)_Space_O(1) | 1 | 92.74 #### Day 14 Sliding Window/Two Pointer @@ -1548,7 +1548,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | 0003 |[Longest Substring Without Repeating Characters](src/main/java/g0001_0100/s0003_longest_substring_without_repeating_characters/Solution.java)| Medium | Top_100_Liked_Questions, Top_Interview_Questions, String, Hash_Table, Sliding_Window, Big_O_Time_O(n)_Space_O(1), AI_can_be_used_to_solve_the_task | 2 | 98.59 | 0020 |[Valid Parentheses](src/main/java/g0001_0100/s0020_valid_parentheses/Solution.java)| Easy | Top_100_Liked_Questions, Top_Interview_Questions, String, Stack, Big_O_Time_O(n)_Space_O(n) | 2 | 97.19 | 0005 |[Longest Palindromic Substring](src/main/java/g0001_0100/s0005_longest_palindromic_substring/Solution.java)| Medium | Top_100_Liked_Questions, Top_Interview_Questions, String, Dynamic_Programming, Big_O_Time_O(n)_Space_O(n) | 7 | 97.82 -| 0394 |[Decode String](src/main/java/g0301_0400/s0394_decode_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Stack, Recursion, Big_O_Time_O(n)_Space_O(n) | 1 | 87.68 +| 0394 |[Decode String](src/main/java/g0301_0400/s0394_decode_string/Solution.java)| Medium | Top_100_Liked_Questions, String, Stack, Recursion, Big_O_Time_O(n)_Space_O(n) | 0 | 100.00 | 0242 |[Valid Anagram](src/main/java/g0201_0300/s0242_valid_anagram/Solution.java)| Easy | String, Hash_Table, Sorting | 2 | 99.01 | 0049 |[Group Anagrams](src/main/java/g0001_0100/s0049_group_anagrams/Solution.java)| Medium | Top_100_Liked_Questions, Top_Interview_Questions, Array, String, Hash_Table, Sorting, Big_O_Time_O(n\*k_log_k)_Space_O(n) | 6 | 97.61 | 0151 |[Reverse Words in a String](src/main/java/g0101_0200/s0151_reverse_words_in_a_string/Solution.java)| Medium | String, Two_Pointers | 2 | 99.94 @@ -1659,7 +1659,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | 0103 |[Binary Tree Zigzag Level Order Traversal](src/main/java/g0101_0200/s0103_binary_tree_zigzag_level_order_traversal/Solution.java)| Medium | Top_Interview_Questions, Breadth_First_Search, Tree, Binary_Tree | 1 | 95.00 | 0108 |[Convert Sorted Array to Binary Search Tree](src/main/java/g0101_0200/s0108_convert_sorted_array_to_binary_search_tree/Solution.java)| Easy | Top_Interview_Questions, Array, Tree, Binary_Tree, Binary_Search_Tree, Divide_and_Conquer | 0 | 100.00 | 1008 |[Construct Binary Search Tree from Preorder Traversal](src/main/java/g1001_1100/s1008_construct_binary_search_tree_from_preorder_traversal/Solution.java)| Medium | Array, Tree, Binary_Tree, Stack, Monotonic_Stack, Binary_Search_Tree | 0 | 100.00 -| 0543 |[Diameter of Binary Tree](src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java)| Easy | Top_100_Liked_Questions, Depth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 1 | 65.86 +| 0543 |[Diameter of Binary Tree](src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java)| Easy | Top_100_Liked_Questions, Depth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 0 | 100.00 | 0938 |[Range Sum of BST](src/main/java/g0901_1000/s0938_range_sum_of_bst/Solution.java)| Easy | Depth_First_Search, Tree, Binary_Tree, Binary_Search_Tree | 0 | 100.00 | 0100 |[Same Tree](src/main/java/g0001_0100/s0100_same_tree/Solution.java)| Easy | Depth_First_Search, Breadth_First_Search, Tree, Binary_Tree | 0 | 100.00 | 0226 |[Invert Binary Tree](src/main/java/g0201_0300/s0226_invert_binary_tree/Solution.java)| Easy | Top_100_Liked_Questions, Depth_First_Search, Breadth_First_Search, Tree, Binary_Tree, Big_O_Time_O(n)_Space_O(n) | 0 | 100.00 @@ -1704,7 +1704,7 @@ implementation 'com.github.javadev:leetcode-in-java:1.37' | 0070 |[Climbing Stairs](src/main/java/g0001_0100/s0070_climbing_stairs/Solution.java)| Easy | Top_100_Liked_Questions, Top_Interview_Questions, Dynamic_Programming, Math, Memoization, Big_O_Time_O(n)_Space_O(n) | 0 | 100.00 | 0064 |[Minimum Path Sum](src/main/java/g0001_0100/s0064_minimum_path_sum/Solution.java)| Medium | Top_100_Liked_Questions, Array, Dynamic_Programming, Matrix, Big_O_Time_O(m\*n)_Space_O(m\*n) | 1 | 99.73 | 0300 |[Longest Increasing Subsequence](src/main/java/g0201_0300/s0300_longest_increasing_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, Array, Dynamic_Programming, Binary_Search, Big_O_Time_O(n\*log_n)_Space_O(n) | 3 | 95.75 -| 1143 |[Longest Common Subsequence](src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n\*m)_Space_O(n\*m) | 33 | 46.23 +| 1143 |[Longest Common Subsequence](src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n\*m)_Space_O(n\*m) | 19 | 89.05 | 0072 |[Edit Distance](src/main/java/g0001_0100/s0072_edit_distance/Solution.java)| Medium | Top_100_Liked_Questions, String, Dynamic_Programming, Big_O_Time_O(n^2)_Space_O(n2) | 3 | 97.19 | 0044 |[Wildcard Matching](src/main/java/g0001_0100/s0044_wildcard_matching/Solution.java)| Hard | Top_Interview_Questions, String, Dynamic_Programming, Greedy, Recursion | 2 | 99.87 | 0010 |[Regular Expression Matching](src/main/java/g0001_0100/s0010_regular_expression_matching/Solution.java)| Hard | Top_Interview_Questions, String, Dynamic_Programming, Recursion, Big_O_Time_O(m\*n)_Space_O(m\*n) | 1 | 100.00 diff --git a/src/main/java/g0301_0400/s0347_top_k_frequent_elements/Solution.java b/src/main/java/g0301_0400/s0347_top_k_frequent_elements/Solution.java index cfed3d555..f6d69f07d 100644 --- a/src/main/java/g0301_0400/s0347_top_k_frequent_elements/Solution.java +++ b/src/main/java/g0301_0400/s0347_top_k_frequent_elements/Solution.java @@ -2,7 +2,7 @@ // #Medium #Top_100_Liked_Questions #Array #Hash_Table #Sorting #Heap_Priority_Queue #Counting // #Divide_and_Conquer #Quickselect #Bucket_Sort #Data_Structure_II_Day_20_Heap_Priority_Queue -// #Big_O_Time_O(n*log(n))_Space_O(k) #2022_07_11_Time_9_ms_(97.93%)_Space_48.5_MB_(83.34%) +// #Big_O_Time_O(n*log(n))_Space_O(k) #2024_11_17_Time_9_ms_(97.30%)_Space_45.4_MB_(92.52%) import java.util.Arrays; import java.util.PriorityQueue; diff --git a/src/main/java/g0301_0400/s0394_decode_string/Solution.java b/src/main/java/g0301_0400/s0394_decode_string/Solution.java index b92aa469d..ef0191a90 100644 --- a/src/main/java/g0301_0400/s0394_decode_string/Solution.java +++ b/src/main/java/g0301_0400/s0394_decode_string/Solution.java @@ -1,7 +1,7 @@ package g0301_0400.s0394_decode_string; // #Medium #Top_100_Liked_Questions #String #Stack #Recursion #Level_1_Day_14_Stack #Udemy_Strings -// #Big_O_Time_O(n)_Space_O(n) #2022_07_15_Time_1_ms_(87.68%)_Space_41.2_MB_(83.30%) +// #Big_O_Time_O(n)_Space_O(n) #2024_11_17_Time_0_ms_(100.00%)_Space_41.5_MB_(58.38%) public class Solution { private int i = 0; diff --git a/src/main/java/g0401_0500/s0416_partition_equal_subset_sum/Solution.java b/src/main/java/g0401_0500/s0416_partition_equal_subset_sum/Solution.java index 80df83ff6..31d020673 100644 --- a/src/main/java/g0401_0500/s0416_partition_equal_subset_sum/Solution.java +++ b/src/main/java/g0401_0500/s0416_partition_equal_subset_sum/Solution.java @@ -1,25 +1,36 @@ package g0401_0500.s0416_partition_equal_subset_sum; // #Medium #Top_100_Liked_Questions #Array #Dynamic_Programming #Level_2_Day_13_Dynamic_Programming -// #Big_O_Time_O(n*sums)_Space_O(n*sums) #2022_12_29_Time_27_ms_(94.53%)_Space_41.8_MB_(95.29%) +// #Big_O_Time_O(n*sums)_Space_O(n*sums) #2024_11_17_Time_5_ms_(99.88%)_Space_42.2_MB_(85.79%) public class Solution { public boolean canPartition(int[] nums) { - int sums = 0; - for (int num : nums) { - sums += num; + int sum = 0; + for (int val : nums) { + sum += val; } - if (sums % 2 == 1) { + if (sum % 2 != 0) { return false; } - sums /= 2; - boolean[] dp = new boolean[sums + 1]; - dp[0] = true; - for (int num : nums) { - for (int sum = sums; sum >= num; sum--) { - dp[sum] = dp[sum] || dp[sum - num]; + sum /= 2; + boolean[] set = new boolean[sum + 1]; + int[] arr = new int[sum + 2]; + int top = 0; + for (int val : nums) { + if (val == sum) { + return true; + } + for (int i = top; i > -1; i--) { + int tempSum = val + arr[i]; + if (tempSum <= sum && !set[tempSum]) { + if (tempSum == sum) { + return true; + } + set[tempSum] = true; + arr[++top] = tempSum; + } } } - return dp[sums]; + return false; } } diff --git a/src/main/java/g0401_0500/s0437_path_sum_iii/Solution.java b/src/main/java/g0401_0500/s0437_path_sum_iii/Solution.java index c6ea4ebc1..421cf21a1 100644 --- a/src/main/java/g0401_0500/s0437_path_sum_iii/Solution.java +++ b/src/main/java/g0401_0500/s0437_path_sum_iii/Solution.java @@ -1,9 +1,10 @@ package g0401_0500.s0437_path_sum_iii; // #Medium #Depth_First_Search #Tree #Binary_Tree #Level_2_Day_7_Tree #Big_O_Time_O(n)_Space_O(n) -// #2022_07_16_Time_18_ms_(45.66%)_Space_42_MB_(88.96%) +// #2024_11_17_Time_2_ms_(100.00%)_Space_44.7_MB_(11.66%) import com_github_leetcode.TreeNode; +import java.util.HashMap; /* * Definition for a binary tree node. @@ -21,28 +22,27 @@ * } */ public class Solution { - private int count = 0; - public int pathSum(TreeNode root, int targetSum) { - if (root == null) { - return 0; - } - helper(root, targetSum, 0); - pathSum(root.left, targetSum); - pathSum(root.right, targetSum); - return count; + HashMap h = new HashMap<>(); + return dfs(root, targetSum, h, 0L); } - public void helper(TreeNode node, int targetSum, long currSum) { - currSum += node.val; - if (targetSum == currSum) { - count++; + int dfs(TreeNode root, int t, HashMap h, Long cs) { + int s = 0; + if (root == null) { + return 0; } - if (node.left != null) { - helper(node.left, targetSum, currSum); + Long k = cs + root.val; + if (k == t) { + s += 1; } - if (node.right != null) { - helper(node.right, targetSum, currSum); + if (h.getOrDefault(k - t, 0) > 0) { + s += h.get(k - t); } + h.put(k, h.getOrDefault(k, 0) + 1); + s += dfs(root.left, t, h, k); + s += dfs(root.right, t, h, k); + h.put(k, h.getOrDefault(k, 0) - 1); + return s; } } diff --git a/src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java b/src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java index 0d5cdf362..f212b542e 100644 --- a/src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java +++ b/src/main/java/g0401_0500/s0438_find_all_anagrams_in_a_string/Solution.java @@ -3,7 +3,7 @@ // #Medium #Top_100_Liked_Questions #String #Hash_Table #Sliding_Window // #Algorithm_II_Day_5_Sliding_Window #Programming_Skills_II_Day_12 // #Level_1_Day_12_Sliding_Window/Two_Pointer #Big_O_Time_O(n+m)_Space_O(1) -// #2022_07_16_Time_6_ms_(99.03%)_Space_47.9_MB_(50.50%) +// #2024_11_17_Time_3_ms_(99.83%)_Space_44.7_MB_(74.83%) import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/g0401_0500/s0494_target_sum/Solution.java b/src/main/java/g0401_0500/s0494_target_sum/Solution.java index 8532aba86..bef704a88 100644 --- a/src/main/java/g0401_0500/s0494_target_sum/Solution.java +++ b/src/main/java/g0401_0500/s0494_target_sum/Solution.java @@ -1,37 +1,45 @@ package g0401_0500.s0494_target_sum; // #Medium #Array #Dynamic_Programming #Backtracking #Big_O_Time_O(n*(sum+s))_Space_O(n*(sum+s)) -// #2022_07_21_Time_9_ms_(79.99%)_Space_45.2_MB_(32.79%) +// #2024_11_17_Time_4_ms_(92.28%)_Space_42.7_MB_(57.04%) public class Solution { - public int findTargetSumWays(int[] nums, int s) { - int sum = 0; - s = Math.abs(s); - for (int num : nums) { - sum += num; + public int findTargetSumWays(int[] nums, int target) { + int totalSum = 0; + int n = nums.length; + for (int i = 0; i < n; i++) { + totalSum += nums[i]; } - // Invalid s, just return 0 - if (s > sum || (sum + s) % 2 != 0) { + int sum = totalSum - target; + if (sum < 0 || sum % 2 == 1) { return 0; } - int[][] dp = new int[(sum + s) / 2 + 1][nums.length + 1]; - dp[0][0] = 1; - // empty knapsack must be processed specially - for (int i = 0; i < nums.length; i++) { - if (nums[i] == 0) { - dp[0][i + 1] = dp[0][i] * 2; - } else { - dp[0][i + 1] = dp[0][i]; - } + return solve(nums, sum / 2); + } + + private int solve(int[] nums, int target) { + int[] prev = new int[target + 1]; + if (nums[0] == 0) { + prev[0] = 2; + } else { + prev[0] = 1; + } + if (nums[0] != 0 && nums[0] <= target) { + prev[nums[0]] = 1; } - for (int i = 1; i < dp.length; i++) { - for (int j = 0; j < nums.length; j++) { - dp[i][j + 1] += dp[i][j]; - if (nums[j] <= i) { - dp[i][j + 1] += dp[i - nums[j]][j]; + int n = nums.length; + for (int i = 1; i < n; i++) { + int[] curr = new int[target + 1]; + for (int j = 0; j <= target; j++) { + int taken = 0; + if (j >= nums[i]) { + taken = prev[j - nums[i]]; } + int nonTaken = prev[j]; + curr[j] = taken + nonTaken; } + prev = curr; } - return dp[(sum + s) / 2][nums.length]; + return prev[target]; } } diff --git a/src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java b/src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java index 670040dac..e2c4f66e7 100644 --- a/src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java +++ b/src/main/java/g0501_0600/s0543_diameter_of_binary_tree/Solution.java @@ -2,7 +2,7 @@ // #Easy #Top_100_Liked_Questions #Depth_First_Search #Tree #Binary_Tree #Level_2_Day_7_Tree // #Udemy_Tree_Stack_Queue #Big_O_Time_O(n)_Space_O(n) -// #2022_08_02_Time_1_ms_(65.86%)_Space_43.5_MB_(33.52%) +// #2024_11_17_Time_0_ms_(100.00%)_Space_44.5_MB_(74.23%) import com_github_leetcode.TreeNode; diff --git a/src/main/java/g0501_0600/s0560_subarray_sum_equals_k/Solution.java b/src/main/java/g0501_0600/s0560_subarray_sum_equals_k/Solution.java index 050e6901e..dfd79635b 100644 --- a/src/main/java/g0501_0600/s0560_subarray_sum_equals_k/Solution.java +++ b/src/main/java/g0501_0600/s0560_subarray_sum_equals_k/Solution.java @@ -1,7 +1,7 @@ package g0501_0600.s0560_subarray_sum_equals_k; // #Medium #Top_100_Liked_Questions #Array #Hash_Table #Prefix_Sum #Data_Structure_II_Day_5_Array -// #Big_O_Time_O(n)_Space_O(n) #2022_08_03_Time_21_ms_(98.97%)_Space_46.8_MB_(88.27%) +// #Big_O_Time_O(n)_Space_O(n) #2024_11_17_Time_22_ms_(95.17%)_Space_47.2_MB_(6.13%) import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/g0601_0700/s0647_palindromic_substrings/Solution.java b/src/main/java/g0601_0700/s0647_palindromic_substrings/Solution.java index c9cedb812..aaf35c22f 100644 --- a/src/main/java/g0601_0700/s0647_palindromic_substrings/Solution.java +++ b/src/main/java/g0601_0700/s0647_palindromic_substrings/Solution.java @@ -1,7 +1,7 @@ package g0601_0700.s0647_palindromic_substrings; // #Medium #String #Dynamic_Programming #Big_O_Time_O(n^2)_Space_O(n) -// #2022_03_21_Time_2_ms_(98.77%)_Space_41.7_MB_(75.10%) +// #2024_11_17_Time_2_ms_(99.31%)_Space_41.4_MB_(77.04%) public class Solution { private void expand(char[] a, int l, int r, int[] res) { diff --git a/src/main/java/g0701_0800/s0739_daily_temperatures/Solution.java b/src/main/java/g0701_0800/s0739_daily_temperatures/Solution.java index e272286b6..86c5856ca 100644 --- a/src/main/java/g0701_0800/s0739_daily_temperatures/Solution.java +++ b/src/main/java/g0701_0800/s0739_daily_temperatures/Solution.java @@ -1,7 +1,7 @@ package g0701_0800.s0739_daily_temperatures; // #Medium #Top_100_Liked_Questions #Array #Stack #Monotonic_Stack #Programming_Skills_II_Day_6 -// #Big_O_Time_O(n)_Space_O(n) #2022_03_25_Time_10_ms_(94.99%)_Space_118.3_MB_(70.21%) +// #Big_O_Time_O(n)_Space_O(n) #2024_11_17_Time_8_ms_(96.83%)_Space_60.6_MB_(55.93%) @SuppressWarnings("java:S135") public class Solution { diff --git a/src/main/java/g0701_0800/s0763_partition_labels/Solution.java b/src/main/java/g0701_0800/s0763_partition_labels/Solution.java index 277b25d8e..87154140d 100644 --- a/src/main/java/g0701_0800/s0763_partition_labels/Solution.java +++ b/src/main/java/g0701_0800/s0763_partition_labels/Solution.java @@ -1,7 +1,7 @@ package g0701_0800.s0763_partition_labels; // #Medium #String #Hash_Table #Greedy #Two_Pointers #Data_Structure_II_Day_7_String -// #Big_O_Time_O(n)_Space_O(1) #2022_03_26_Time_1_ms_(100.00%)_Space_40.3_MB_(98.19%) +// #Big_O_Time_O(n)_Space_O(1) #2024_11_17_Time_2_ms_(100.00%)_Space_41.9_MB_(73.06%) import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java b/src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java index 5a48ae3ff..eef86afad 100644 --- a/src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java +++ b/src/main/java/g1101_1200/s1143_longest_common_subsequence/Solution.java @@ -3,7 +3,7 @@ // #Medium #Top_100_Liked_Questions #String #Dynamic_Programming // #Algorithm_II_Day_17_Dynamic_Programming #Dynamic_Programming_I_Day_19 // #Udemy_Dynamic_Programming #Big_O_Time_O(n*m)_Space_O(n*m) -// #2023_06_01_Time_33_ms_(46.23%)_Space_48.2_MB_(90.63%) +// #2024_11_17_Time_19_ms_(89.05%)_Space_50.9_MB_(33.70%) public class Solution { public int longestCommonSubsequence(String text1, String text2) {