Skip to content

Commit 69a5792

Browse files
committed
Refactor
1 parent 4041838 commit 69a5792

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1087
-33
lines changed

.DS_Store

6 KB
Binary file not shown.

src/.DS_Store

6 KB
Binary file not shown.

src/w1/BestTimeToBuyAndSellStock.java renamed to src/array/BestTimeToBuyAndSellStock.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w1;
1+
package array;
22

33
/**
44
* Description: https://leetcode.com/problems/best-time-to-buy-and-sell-stock

src/array/CombinationSum.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package array;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* Description: https://leetcode.com/problems/combination-sum
8+
* Difficulty: Medium
9+
* Time complexity: O(n * n!)
10+
* Space complexity: O(n)
11+
*/
12+
public class CombinationSum {
13+
14+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
15+
List<List<Integer>> result = new ArrayList<>();
16+
backtrack(candidates, target, new ArrayList<>(), 0, result);
17+
18+
return result;
19+
}
20+
21+
private void backtrack(
22+
int[] candidates,
23+
int remains,
24+
List<Integer> permutation,
25+
int start,
26+
List<List<Integer>> result) {
27+
if (remains == 0) {
28+
result.add(permutation);
29+
return;
30+
}
31+
32+
if (remains < 0) {
33+
return;
34+
}
35+
36+
for (int i = start; i < candidates.length; i++) {
37+
List<Integer> newPermutation = new ArrayList<>(permutation);
38+
newPermutation.add(candidates[i]);
39+
40+
backtrack(candidates, remains - candidates[i], newPermutation, i, result);
41+
}
42+
}
43+
}

src/w2/ContainsDuplicate.java renamed to src/array/ContainsDuplicate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w2;
1+
package array;
22

33
import java.util.HashSet;
44
import java.util.Set;

src/w3/InsertInterval.java renamed to src/array/InsertInterval.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w3;
1+
package array;
22

33
import java.util.ArrayList;
44
import java.util.List;

src/w2/MajorityElement.java renamed to src/array/MajorityElement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w2;
1+
package array;
22

33
import java.util.Arrays;
44

src/array/MergeIntervals.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package array;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
/**
8+
* Description: https://leetcode.com/problems/merge-intervals
9+
* Difficulty: Medium
10+
* Time complexity: O(nlog n)
11+
* Space complexity: O(n)
12+
*/
13+
public class MergeIntervals {
14+
15+
public int[][] merge(int[][] intervals) {
16+
if (intervals.length < 2) return intervals;
17+
18+
Arrays.sort(intervals, (i1, i2) -> Integer.compare(i1[0], i2[0]));
19+
20+
int start = intervals[0][0];
21+
int end = intervals[0][1];
22+
23+
List<int[]> result = new ArrayList<>();
24+
for (int[] current : intervals) {
25+
if (current[0] > end) {
26+
result.add(new int[]{start, end});
27+
start = current[0];
28+
end = current[1];
29+
} else {
30+
end = Math.max(current[1], end);
31+
}
32+
}
33+
34+
result.add(new int[]{start, end});
35+
36+
return result.toArray(new int[0][]);
37+
}
38+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package array;
2+
3+
/**
4+
* Description: https://leetcode.com/problems/product-of-array-except-self
5+
* Difficulty: Medium
6+
* Time complexity: O(n)
7+
* Space complexity: O(1)
8+
*/
9+
public class ProductOfArrayExceptSelf {
10+
11+
public int[] productExceptSelf(int[] nums) {
12+
int[] result = new int[nums.length];
13+
14+
int left = 1;
15+
for (int i = 0; i < nums.length; i++) {
16+
result[i] = left;
17+
left *= nums[i];
18+
}
19+
20+
int right = 1;
21+
for (int i = nums.length - 1; i >= 0; i--) {
22+
result[i] *= right;
23+
right *= nums[i];
24+
}
25+
26+
return result;
27+
}
28+
}

src/array/SortColors.java

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package array;
2+
3+
/**
4+
* Description: https://leetcode.com/problems/sort-colors
5+
* Difficulty: Medium
6+
*/
7+
public class SortColors {
8+
9+
private static final int RED = 0;
10+
private static final int WHITE = 1;
11+
private static final int BLUE = 2;
12+
13+
/**
14+
* Time complexity: O(n)
15+
* Space complexity: O(1)
16+
*/
17+
public void sortColorsViaDutchFlagAlgo(int[] nums) {
18+
int red = 0;
19+
int white = 0;
20+
int blue = nums.length - 1;
21+
22+
while (white <= blue) {
23+
if (nums[white] == WHITE) {
24+
white++;
25+
} else if (nums[white] == RED) {
26+
swap(nums, white, red);
27+
white++;
28+
red++;
29+
} else { // nums[white] == BLUE
30+
swap(nums, white, blue);
31+
blue--;
32+
}
33+
}
34+
}
35+
36+
/**
37+
* Time complexity: O(n * k)
38+
* Space complexity: O(k)
39+
*/
40+
public void sortColorsViaCountingSort(int[] nums) {
41+
int[] count = new int[3];
42+
43+
for (int color : nums) {
44+
count[color]++;
45+
}
46+
47+
int k = 0;
48+
for (int i = 0; i < count.length; i++) {
49+
int colorCount = count[i];
50+
for (int j = 0; j < colorCount; j++) {
51+
nums[k] = i;
52+
k++;
53+
}
54+
}
55+
}
56+
57+
/**
58+
* Time complexity: O(nlog n)
59+
* Space complexity: O(log n)
60+
*/
61+
public void sortColorsViaInPlaceQuickSort(int[] nums) {
62+
quickSort(nums, 0, nums.length - 1);
63+
}
64+
65+
private void quickSort(int[] nums, int left, int right) {
66+
if (left >= right) return;
67+
68+
int l = left;
69+
int r = right;
70+
int pivot = nums[l + (r - l) / 2];
71+
72+
while (l <= r) {
73+
if (nums[l] < pivot) {
74+
l++;
75+
} else if (nums[r] > pivot) {
76+
r--;
77+
} else {
78+
swap(nums, l, r);
79+
l++;
80+
r--;
81+
}
82+
}
83+
84+
quickSort(nums, left, r);
85+
quickSort(nums, l, right);
86+
}
87+
88+
private void swap(int[] nums, int i, int j) {
89+
int tmp = nums[i];
90+
nums[i] = nums[j];
91+
nums[j] = tmp;
92+
}
93+
}

src/w3/TreeSum.java renamed to src/array/TreeSum.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w3;
1+
package array;
22

33
import java.util.*;
44

src/w1/TwoSum.java renamed to src/array/TwoSum.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w1;
1+
package array;
22

33
import java.util.HashMap;
44
import java.util.Map;

src/w2/AddBinary.java renamed to src/binary/AddBinary.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w2;
1+
package binary;
22

33
/**
44
* Description: https://leetcode.com/problems/add-binary

src/w1/BinarySearch.java renamed to src/binary_search/BinarySearch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w1;
1+
package binary_search;
22

33
/**
44
* Description: https://leetcode.com/problems/binary-search

src/w2/FirstBadVersion.java renamed to src/binary_search/FirstBadVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w2;
1+
package binary_search;
22

33
/**
44
* Description: https://leetcode.com/problems/first-bad-version
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package binary_search;
2+
3+
/**
4+
* Description: https://leetcode.com/problems/search-in-rotated-sorted-array
5+
* Difficulty: Medium
6+
* Time complexity: O(log n)
7+
* Space complexity: O(1)
8+
*/
9+
public class SearchInRotatedSortedArray {
10+
11+
public int findTarget(int[] nums, int target) {
12+
int pivot = findPivot(nums);
13+
14+
return target >= nums[pivot] && target <= nums[nums.length - 1]
15+
? findTarget(nums, pivot, nums.length - 1, target)
16+
: findTarget(nums, 0, pivot - 1, target);
17+
}
18+
19+
private int findPivot(int[] nums) {
20+
int left = 0;
21+
int right = nums.length - 1;
22+
23+
while (left < right) {
24+
int mid = (left + right) / 2;
25+
26+
if (nums[mid] >= nums[0]) {
27+
left = mid + 1;
28+
} else {
29+
right = mid;
30+
}
31+
}
32+
33+
return left;
34+
}
35+
36+
private int findTarget(int[] nums, int left, int right, int target) {
37+
while (left <= right) {
38+
int mid = (left + right) / 2;
39+
40+
if (nums[mid] == target) {
41+
return mid;
42+
}
43+
44+
if (nums[mid] > target) {
45+
right = mid - 1;
46+
} else {
47+
left = mid + 1;
48+
}
49+
}
50+
51+
return -1;
52+
}
53+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package binary_search;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
/**
9+
* Description: https://leetcode.com/problems/time-based-key-value-store
10+
* Difficulty: Medium
11+
* Time complexity: O(log n)
12+
* Space complexity: O(n)
13+
*/
14+
public class TimeBasedKeyValueStore {
15+
16+
private final Map<String, List<Node>> map;
17+
18+
public TimeBasedKeyValueStore() {
19+
map = new HashMap<>();
20+
}
21+
22+
public void set(String key, String value, int timestamp) {
23+
map.computeIfAbsent(key, k -> new ArrayList<>())
24+
.add(new Node(value, timestamp));
25+
}
26+
27+
public String get(String key, int timestamp) {
28+
List<Node> list = map.get(key);
29+
if (list == null) return "";
30+
31+
return search(list, timestamp);
32+
}
33+
34+
private String search(List<Node> list, int target) {
35+
int left = 0;
36+
int right = list.size() - 1;
37+
38+
String result = "";
39+
while (left <= right) {
40+
int mid = (left + right) / 2;
41+
if (list.get(mid).timestamp == target) {
42+
return list.get(mid).value;
43+
}
44+
45+
if (list.get(mid).timestamp > target) {
46+
right = mid - 1;
47+
} else {
48+
result = list.get(mid).value;
49+
left = mid + 1;
50+
}
51+
}
52+
53+
return result;
54+
}
55+
56+
private static class Node {
57+
String value;
58+
int timestamp;
59+
60+
public Node(String v, int t) {
61+
value = v;
62+
timestamp = t;
63+
}
64+
}
65+
}

src/w1/LowestCommonAncestorOfBinarySearchTree.java renamed to src/binary_search_tree/LowestCommonAncestorOfBinarySearchTree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package w1;
1+
package binary_search_tree;
22

33
/**
44
* Description: https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree

0 commit comments

Comments
 (0)