Skip to content

Commit 0fbe1b2

Browse files
committed
Updated tag for tasks 139-208
1 parent 2150e4f commit 0fbe1b2

File tree

16 files changed

+148
-93
lines changed

16 files changed

+148
-93
lines changed

src/main/java/g0101_0200/s0139_word_break/Solution.java

+19-25
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,37 @@
33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #String #Hash_Table
44
// #Dynamic_Programming #Trie #Memoization #Algorithm_II_Day_15_Dynamic_Programming
55
// #Dynamic_Programming_I_Day_9 #Udemy_Dynamic_Programming #Big_O_Time_O(M+max*N)_Space_O(M+N+max)
6-
// #2022_06_24_Time_2_ms_(97.08%)_Space_42.1_MB_(90.92%)
6+
// #2024_11_15_Time_1_ms_(99.42%)_Space_42.1_MB_(80.42%)
77

88
import java.util.HashSet;
99
import java.util.List;
1010
import java.util.Set;
1111

1212
public class Solution {
13+
Boolean[] memo;
1314
public boolean wordBreak(String s, List<String> wordDict) {
14-
Set<String> set = new HashSet<>();
15-
int max = 0;
16-
boolean[] flag = new boolean[s.length() + 1];
17-
for (String st : wordDict) {
18-
set.add(st);
19-
if (max < st.length()) {
20-
max = st.length();
21-
}
22-
}
23-
for (int i = 1; i <= max; i++) {
24-
if (dfs(s, 0, i, max, set, flag)) {
25-
return true;
26-
}
27-
}
28-
return false;
15+
memo = new Boolean[s.length() + 1];
16+
return dp(s, 0, wordDict);
2917
}
3018

31-
private boolean dfs(String s, int start, int end, int max, Set<String> set, boolean[] flag) {
32-
if (!flag[end] && set.contains(s.substring(start, end))) {
33-
flag[end] = true;
34-
if (end == s.length()) {
35-
return true;
19+
public boolean dp(String s, int i, List<String> wordDict){
20+
if(i == s.length()) return true;
21+
if(memo[i] != null) return memo[i];
22+
for(String word: wordDict){
23+
int len = word.length();
24+
if(i + len > s.length()){
25+
continue;
3626
}
37-
for (int i = 1; i <= max; i++) {
38-
if (end + i <= s.length() && dfs(s, end, end + i, max, set, flag)) {
39-
return true;
40-
}
27+
String subStr = s.substring(i, i + len);
28+
if(!subStr.equals(word)){
29+
continue;
30+
}
31+
if(dp(s, i + len, wordDict)){
32+
memo[i] = true;
33+
return true;
4134
}
4235
}
36+
memo[i] = false;
4337
return false;
4438
}
4539
}

src/main/java/g0101_0200/s0141_linked_list_cycle/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Easy #Top_100_Liked_Questions #Top_Interview_Questions #Hash_Table #Two_Pointers #Linked_List
44
// #Data_Structure_I_Day_7_Linked_List #Udemy_Linked_List #Big_O_Time_O(N)_Space_O(1)
5-
// #2022_06_24_Time_0_ms_(100.00%)_Space_45.5_MB_(68.52%)
5+
// #2024_11_15_Time_0_ms_(100.00%)_Space_44.3_MB_(52.46%)
66

77
import com_github_leetcode.ListNode;
88

src/main/java/g0101_0200/s0142_linked_list_cycle_ii/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Hash_Table #Two_Pointers #Linked_List
44
// #Data_Structure_II_Day_10_Linked_List #Level_1_Day_4_Linked_List #Udemy_Linked_List
5-
// #Big_O_Time_O(N)_Space_O(1) #2022_06_24_Time_0_ms_(100.00%)_Space_42.3_MB_(98.70%)
5+
// #Big_O_Time_O(N)_Space_O(1) #2024_11_15_Time_0_ms_(100.00%)_Space_44.7_MB_(20.31%)
66

77
import com_github_leetcode.ListNode;
88

src/main/java/g0101_0200/s0146_lru_cache/LRUCache.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Hash_Table #Design #Linked_List
44
// #Doubly_Linked_List #Udemy_Linked_List #Big_O_Time_O(1)_Space_O(capacity)
5-
// #2022_06_24_Time_87_ms_(50.80%)_Space_125.2_MB_(58.73%)
5+
// #2024_11_15_Time_40_ms_(98.20%)_Space_111.4_MB_(88.70%)
66

77
import java.util.HashMap;
88
import java.util.Map;

src/main/java/g0101_0200/s0148_sort_list/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Sorting #Two_Pointers #Linked_List
44
// #Divide_and_Conquer #Merge_Sort #Level_2_Day_4_Linked_List #Big_O_Time_O(log(N))_Space_O(log(N))
5-
// #2022_06_24_Time_12_ms_(85.82%)_Space_76_MB_(43.84%)
5+
// #2024_11_15_Time_9_ms_(93.90%)_Space_56.9_MB_(37.47%)
66

77
import com_github_leetcode.ListNode;
88

src/main/java/g0101_0200/s0152_maximum_product_subarray/Solution.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@
22

33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Array #Dynamic_Programming
44
// #Dynamic_Programming_I_Day_6 #Level_2_Day_13_Dynamic_Programming #Udemy_Dynamic_Programming
5-
// #Big_O_Time_O(N)_Space_O(1) #2024_07_03_Time_1_ms_(92.31%)_Space_44.6_MB_(75.65%)
5+
// #Big_O_Time_O(N)_Space_O(1) #2024_11_15_Time_1_ms_(92.74%)_Space_45_MB_(23.41%)
66

77
public class Solution {
88
public int maxProduct(int[] nums) {
9-
int currentMaxProd = nums[0];
10-
int currentMinProd = nums[0];
11-
int overAllMaxProd = nums[0];
12-
for (int i = 1; i < nums.length; i++) {
13-
if (nums[i] < 0) {
14-
int temp = currentMaxProd;
15-
currentMaxProd = currentMinProd;
16-
currentMinProd = temp;
17-
}
18-
currentMaxProd = Math.max(nums[i], nums[i] * currentMaxProd);
19-
currentMinProd = Math.min(nums[i], nums[i] * currentMinProd);
20-
overAllMaxProd = Math.max(overAllMaxProd, currentMaxProd);
9+
int m=Integer.MIN_VALUE;
10+
int n=nums.length;
11+
int start=1;
12+
int end=1;
13+
for(int i=0;i<n;i++){
14+
if(start==0)
15+
start=1;
16+
if (end==0)
17+
end=1;
18+
start=start*nums[i];
19+
end=end*nums[n-i-1];
20+
m=Math.max(m,Math.max(start,end));
21+
2122
}
22-
return overAllMaxProd;
23+
return m;
2324
}
2425
}

src/main/java/g0101_0200/s0153_find_minimum_in_rotated_sorted_array/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Array #Binary_Search #Algorithm_II_Day_2_Binary_Search
44
// #Binary_Search_I_Day_12 #Udemy_Binary_Search #Big_O_Time_O(log_N)_Space_O(log_N)
5-
// #2022_06_25_Time_0_ms_(100.00%)_Space_43.3_MB_(6.36%)
5+
// #2024_11_15_Time_0_ms_(100.00%)_Space_42.1_MB_(33.31%)
66

77
public class Solution {
88
private int findMinUtil(int[] nums, int l, int r) {

src/main/java/g0101_0200/s0155_min_stack/MinStack.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Stack #Design
44
// #Data_Structure_II_Day_14_Stack_Queue #Programming_Skills_II_Day_18 #Level_2_Day_16_Design
5-
// #Udemy_Design #Big_O_Time_O(1)_Space_O(N) #2022_06_25_Time_3_ms_(100.00%)_Space_44.3_MB_(85.39%)
5+
// #Udemy_Design #Big_O_Time_O(1)_Space_O(N) #2024_11_15_Time_4_ms_(96.54%)_Space_44.5_MB_(84.54%)
66

77
public class MinStack {
88
private static class Node {

src/main/java/g0101_0200/s0160_intersection_of_two_linked_lists/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Easy #Top_100_Liked_Questions #Top_Interview_Questions #Hash_Table #Two_Pointers #Linked_List
44
// #Data_Structure_II_Day_11_Linked_List #Udemy_Linked_List #Big_O_Time_O(M+N)_Space_O(1)
5-
// #2022_06_25_Time_1_ms_(99.68%)_Space_55.1_MB_(63.42%)
5+
// #2024_11_15_Time_1_ms_(99.92%)_Space_48.4_MB_(68.45%)
66

77
import com_github_leetcode.ListNode;
88

src/main/java/g0101_0200/s0169_majority_element/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Easy #Top_100_Liked_Questions #Top_Interview_Questions #Array #Hash_Table #Sorting #Counting
44
// #Divide_and_Conquer #Data_Structure_II_Day_1_Array #Udemy_Famous_Algorithm
5-
// #Big_O_Time_O(n)_Space_O(1) #2022_06_25_Time_1_ms_(100.00%)_Space_45.5_MB_(97.51%)
5+
// #Big_O_Time_O(n)_Space_O(1) #2024_11_15_Time_1_ms_(99.89%)_Space_52.8_MB_(64.33%)
66

77
public class Solution {
88
public int majorityElement(int[] arr) {

src/main/java/g0101_0200/s0189_rotate_array/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Array #Math #Two_Pointers
44
// #Algorithm_I_Day_2_Two_Pointers #Udemy_Arrays #Big_O_Time_O(n)_Space_O(1)
5-
// #2022_06_27_Time_0_ms_(100.00%)_Space_58_MB_(96.22%)
5+
// #2024_11_15_Time_0_ms_(100.00%)_Space_57.7_MB_(14.36%)
66

77
public class Solution {
88
private void reverse(int[] nums, int l, int r) {

src/main/java/g0101_0200/s0198_house_robber/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Array #Dynamic_Programming
44
// #Algorithm_I_Day_12_Dynamic_Programming #Dynamic_Programming_I_Day_3
55
// #Level_2_Day_12_Dynamic_Programming #Udemy_Dynamic_Programming #Big_O_Time_O(n)_Space_O(n)
6-
// #2022_06_28_Time_0_ms_(100.00%)_Space_39.9_MB_(85.30%)
6+
// #2024_11_15_Time_0_ms_(100.00%)_Space_40.7_MB_(77.55%)
77

88
public class Solution {
99
public int rob(int[] nums) {

src/main/java/g0101_0200/s0200_number_of_islands/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// #Breadth_First_Search #Matrix #Union_Find
55
// #Algorithm_II_Day_6_Breadth_First_Search_Depth_First_Search
66
// #Graph_Theory_I_Day_1_Matrix_Related_Problems #Level_1_Day_9_Graph/BFS/DFS #Udemy_Graph
7-
// #Big_O_Time_O(M*N)_Space_O(M*N) #2022_06_28_Time_3_ms_(97.76%)_Space_57.5_MB_(41.23%)
7+
// #Big_O_Time_O(M*N)_Space_O(M*N) #2024_11_15_Time_3_ms_(87.24%)_Space_49.6_MB_(39.89%)
88

99
public class Solution {
1010
public int numIslands(char[][] grid) {

src/main/java/g0201_0300/s0206_reverse_linked_list/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// #Easy #Top_100_Liked_Questions #Top_Interview_Questions #Linked_List #Recursion
44
// #Data_Structure_I_Day_8_Linked_List #Algorithm_I_Day_10_Recursion_Backtracking
55
// #Level_1_Day_3_Linked_List #Udemy_Linked_List #Big_O_Time_O(N)_Space_O(1)
6-
// #2022_06_28_Time_0_ms_(100.00%)_Space_43.9_MB_(7.98%)
6+
// #2024_11_15_Time_0_ms_(100.00%)_Space_42.5_MB_(41.63%)
77

88
import com_github_leetcode.ListNode;
99

src/main/java/g0201_0300/s0207_course_schedule/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Depth_First_Search
44
// #Breadth_First_Search #Graph #Topological_Sort #Big_O_Time_O(N)_Space_O(N)
5-
// #2022_06_28_Time_3_ms_(97.58%)_Space_48.2_MB_(49.51%)
5+
// #2024_11_15_Time_3_ms_(99.99%)_Space_44.8_MB_(88.52%)
66

77
import java.util.ArrayList;
88

src/main/java/g0201_0300/s0208_implement_trie_prefix_tree/Trie.java

+101-41
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,119 @@
33
// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #String #Hash_Table #Design #Trie
44
// #Level_2_Day_16_Design #Udemy_Trie_and_Heap
55
// #Big_O_Time_O(word.length())_or_O(prefix.length())_Space_O(N)
6-
// #2022_06_28_Time_34_ms_(99.90%)_Space_51_MB_(94.92%)
6+
// #2024_11_15_Time_30_ms_(99.78%)_Space_55.1_MB_(72.51%)
77

88
@SuppressWarnings("java:S1104")
99
public class Trie {
10-
private final TrieNode root;
11-
private boolean startWith;
12-
13-
private static class TrieNode {
14-
// Initialize your data structure here.
15-
public TrieNode[] children;
16-
public boolean isWord;
10+
boolean ans=false;
11+
TrieNode[] trees=new TrieNode[26];
12+
public Trie() {
1713

18-
public TrieNode() {
19-
children = new TrieNode[26];
20-
}
2114
}
2215

23-
public Trie() {
24-
root = new TrieNode();
16+
TrieNode mapWordToTree(TrieNode t, String word, int i){
17+
char m=word.charAt(i);
18+
boolean found=false;
19+
TrieNode a=t.nexts[m-'a'];
20+
if(a!=null){
21+
if(i!=word.length()-1){
22+
mapWordToTree(a,word,i+1);
23+
found=true;
24+
25+
}else{
26+
a.end=true;
27+
found=true;
28+
}
29+
}
30+
if(!found){
31+
TrieNode prev=t;
32+
for(int j=i;j<word.length();j++){
33+
TrieNode temp=new TrieNode(word.charAt(j));
34+
prev.nexts[word.charAt(j)-'a']=temp;
35+
prev=temp;
36+
}
37+
prev.end=true;
38+
}
39+
return t;
2540
}
2641

27-
// Inserts a word into the trie.
2842
public void insert(String word) {
29-
insert(word, root, 0);
43+
char a=word.charAt(0);
44+
if(trees[a-'a']==null){
45+
TrieNode t=new TrieNode(a);
46+
trees[a-'a']=t;
47+
if(1==word.length()){
48+
trees[a-'a'].end=true;
49+
return;
50+
}
51+
trees[a-'a']=mapWordToTree(trees[a-'a'],word,1);
52+
}else{
53+
if(1==word.length()){
54+
trees[a-'a'].end=true;
55+
return;
56+
}
57+
trees[a-'a']=mapWordToTree(trees[a-'a'],word,1);
58+
}
59+
//System.out.println(trees[a-'a']);
3060
}
61+
public boolean searchWordInTree(TrieNode t, String word, int i){
62+
char a=word.charAt(i);
63+
TrieNode m=t.nexts[a-'a'];
64+
if(m!=null){
65+
66+
if(i==word.length()-1){
67+
ans=true;
68+
if(m.end){
69+
return true;
70+
}else{
71+
return false;
72+
}
73+
}
74+
return searchWordInTree(m,word, i+1);
3175

32-
private void insert(String word, TrieNode root, int idx) {
33-
if (idx == word.length()) {
34-
root.isWord = true;
35-
return;
36-
}
37-
int index = word.charAt(idx) - 'a';
38-
if (root.children[index] == null) {
39-
root.children[index] = new TrieNode();
4076
}
41-
insert(word, root.children[index], idx + 1);
77+
return false;
4278
}
43-
44-
// Returns if the word is in the trie.
4579
public boolean search(String word) {
46-
return search(word, root, 0);
80+
char a=word.charAt(0);
81+
if(trees[a-'a']==null){
82+
return false;
83+
}else{
84+
if(1==word.length()){
85+
if(trees[a-'a'].end){
86+
return true;
87+
}else{
88+
return false;
89+
}
90+
}
91+
return searchWordInTree(trees[a-'a'],word,1);
92+
}
4793
}
4894

49-
private boolean search(String word, TrieNode root, int idx) {
50-
if (idx == word.length()) {
51-
startWith = true;
52-
return root.isWord;
53-
}
54-
int index = word.charAt(idx) - 'a';
55-
if (root.children[index] == null) {
56-
startWith = false;
95+
public boolean startsWith(String prefix) {
96+
char a=prefix.charAt(0);
97+
ans=false;
98+
if(trees[a-'a']==null){
5799
return false;
100+
}else{
101+
if(1==prefix.length()){
102+
return true;
103+
}
104+
searchWordInTree(trees[a-'a'],prefix,1);
58105
}
59-
return search(word, root.children[index], idx + 1);
106+
return ans;
60107
}
61108

62-
// Returns if there is any word in the trie
63-
// that starts with the given prefix.
64-
public boolean startsWith(String prefix) {
65-
search(prefix);
66-
return startWith;
109+
class TrieNode{
110+
char val;
111+
boolean end=false;
112+
TrieNode[] nexts=new TrieNode[26];
113+
TrieNode(char val){
114+
this.val=val;
115+
}
116+
@Override public String toString(){
117+
return val+" "+nexts+" "+end;
118+
}
67119
}
68120
}
69121

@@ -74,3 +126,11 @@ public boolean startsWith(String prefix) {
74126
* boolean param_2 = obj.search(word);
75127
* boolean param_3 = obj.startsWith(prefix);
76128
*/
129+
130+
/*
131+
* Your Trie object will be instantiated and called as such:
132+
* Trie obj = new Trie();
133+
* obj.insert(word);
134+
* boolean param_2 = obj.search(word);
135+
* boolean param_3 = obj.startsWith(prefix);
136+
*/

0 commit comments

Comments
 (0)