Skip to content

Commit 29a996a

Browse files
committed
Code is Added
1 parent 7988b57 commit 29a996a

File tree

24 files changed

+382
-0
lines changed

24 files changed

+382
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class KInversePairsArray {
2+
private final int mod = (int) Math.pow(10, 9) + 7;
3+
4+
public int kInversePairs(int n, int k) {
5+
// n numbers can generate at most n * (n - 1) / 2 inverse pairs
6+
if (k > n * (n - 1) / 2) return 0;
7+
if (k == n * (n - 1) / 2 || k == 0) return 1;
8+
9+
int[][] dp = new int[n + 1][k + 1];
10+
11+
for (int i = 1; i < n + 1; i++) {
12+
// deal with j = 0
13+
dp[i][0] = 1;
14+
for (int j = 1; j < Math.min(k, i * (i - 1) / 2) + 1; j++) {
15+
dp[i][j] = (dp[i][j - 1] + dp[i - 1][j] - (j >= i ? dp[i - 1][j - i] : 0)) % mod;
16+
// all dp[i][j] modulo 10^9 + 7
17+
// so dp[i - 1][j - 1] might bigger than dp[i][j - 1] + dp[i - 1][j]
18+
if (dp[i][j] < 0)
19+
dp[i][j] += mod;
20+
}
21+
}
22+
23+
return dp[n][k];
24+
}
25+
}

0629.k-inverse-pairs-array/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# [629. K Inverse Pairs Array](https://leetcode.com/problems/k-inverse-pairs-array/)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import java.util.Arrays;
2+
import java.util.PriorityQueue;
3+
4+
class CourseScheduleIii {
5+
public int scheduleCourse(int[][] courses) {
6+
Arrays.sort(courses, (a, b) -> a[1] - b[1]);
7+
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
8+
int time = 0;
9+
for (int[] course : courses) {
10+
if (course[0] <= course[1]) {
11+
if (course[0] + time <= course[1]) {
12+
pq.offer(course[0]);
13+
time += course[0];
14+
} else {
15+
if (pq.peek() > course[0]) {
16+
time -= pq.poll();
17+
time += course[0];
18+
pq.offer(course[0]);
19+
}
20+
}
21+
}
22+
}
23+
return pq.size();
24+
}
25+
}

0630.course-schedule-iii/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [630. Course Schedule III](https://leetcode.com/problems/course-schedule-iii/)
2+

0633.sum-of-square-numbers/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [633. Sum of Square Numbers](https://leetcode.com/problems/sum-of-square-numbers/)
2+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class SumOfSquareNumbers {
2+
public boolean judgeSquareSum(int c) {
3+
if (c < 0) return false;
4+
5+
int i = 0, j = (int) Math.sqrt(c);
6+
while (i <= j) {
7+
long sum = ((long) i * i) + ((long) j * j);
8+
if (sum == c) {
9+
return true;
10+
} else if (sum > c) {
11+
j--;
12+
} else {
13+
i++;
14+
}
15+
}
16+
17+
return false;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import java.util.ArrayList;
2+
import java.util.LinkedList;
3+
import java.util.List;
4+
import java.util.Queue;
5+
6+
/**
7+
* Definition for a binary tree node.
8+
* public class TreeNode {
9+
* int val;
10+
* TreeNode left;
11+
* TreeNode right;
12+
* TreeNode() {}
13+
* TreeNode(int val) { this.val = val; }
14+
* TreeNode(int val, TreeNode left, TreeNode right) {
15+
* this.val = val;
16+
* this.left = left;
17+
* this.right = right;
18+
* }
19+
* }
20+
*/
21+
class AverageOfLevelsInBinaryTree {
22+
public List<Double> averageOfLevels(TreeNode root) {
23+
List<Double> ret = new ArrayList<>();
24+
if (root == null) return ret;
25+
Queue<TreeNode> queue = new LinkedList<>();
26+
queue.add(root);
27+
while (!queue.isEmpty()) {
28+
int cnt = queue.size();
29+
double sum = 0;
30+
for (int i = 0; i < cnt; i++) {
31+
TreeNode node = queue.poll();
32+
sum += node != null ? node.val : 0;
33+
if (node.left != null) queue.add(node.left);
34+
if (node.right != null) queue.add(node.right);
35+
}
36+
ret.add(sum / cnt);
37+
}
38+
return ret;
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# [637. Average of Levels in Binary Tree](https://leetcode.com/problems/average-of-levels-in-binary-tree/)

0645.set-mismatch/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [645. Set Mismatch](https://leetcode.com/problems/set-mismatch/)
2+

0645.set-mismatch/SetMismatch.java

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class SetMismatch {
2+
private void swap(int[] nums, int i, int j) {
3+
int tmp = nums[i];
4+
nums[i] = nums[j];
5+
nums[j] = tmp;
6+
}
7+
8+
public int[] findErrorNums(int[] nums) {
9+
for (int i = 0; i < nums.length; i++) {
10+
while (nums[i] != i + 1 && nums[nums[i] - 1] != nums[i]) {
11+
swap(nums, i, nums[i] - 1);
12+
}
13+
}
14+
for (int i = 0; i < nums.length; i++) {
15+
if (nums[i] != i + 1) {
16+
return new int[]{nums[i], i + 1};
17+
}
18+
}
19+
return null;
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class PalindromicSubstrings {
2+
private int cnt = 0;
3+
4+
public void extendSubstrings(String s, int start, int end) {
5+
while (start >= 0 && end < s.length() && s.charAt(start) == s.charAt(end)) {
6+
start--;
7+
end++;
8+
cnt++;
9+
}
10+
}
11+
12+
public int countSubstrings(String s) {
13+
for (int i = 0; i < s.length(); i++) {
14+
extendSubstrings(s, i, i);
15+
extendSubstrings(s, i, i + 1);
16+
}
17+
return cnt;
18+
}
19+
}

0647.palindromic-substrings/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# [647. Palindromic Substrings](https://leetcode.com/problems/palindromic-substrings/)

0649.dota2-senate/Dota2Senate.java

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import java.util.LinkedList;
2+
import java.util.Queue;
3+
4+
class Dota2Senate {
5+
public String predictPartyVictory(String senate) {
6+
int n = senate.length();
7+
Queue<Integer> radiant = new LinkedList<>();
8+
Queue<Integer> dire = new LinkedList<>();
9+
for (int i = 0; i < n; i++) {
10+
if (senate.charAt(i) == 'R') {
11+
radiant.offer(i);
12+
} else {
13+
dire.offer(i);
14+
}
15+
}
16+
while (!radiant.isEmpty() && !dire.isEmpty()) {
17+
int radiantIndex = radiant.poll(), direIndex = dire.poll();
18+
if (radiantIndex < direIndex) {
19+
radiant.offer(radiantIndex + n);
20+
} else {
21+
dire.offer(direIndex + n);
22+
}
23+
}
24+
return !radiant.isEmpty() ? "Radiant" : "Dire";
25+
}
26+
}

0649.dota2-senate/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# [649. Dota2 Senate](https://leetcode.com/problems/dota2-senate/)
2+
3+
4+
Complexity Analysis:
5+
6+
- Time Complexity: $O(n)$. $n$ is the length of `senate`.
7+
- Space Complexity: $O(n)$.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import java.util.*;
2+
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* public class TreeNode {
7+
* int val;
8+
* TreeNode left;
9+
* TreeNode right;
10+
* TreeNode() {}
11+
* TreeNode(int val) { this.val = val; }
12+
* TreeNode(int val, TreeNode left, TreeNode right) {
13+
* this.val = val;
14+
* this.left = left;
15+
* this.right = right;
16+
* }
17+
* }
18+
*/
19+
class FindDuplicateSubtrees {
20+
Map<String, Pair<TreeNode, Integer>> seen = new HashMap<>();
21+
Set<TreeNode> repeat = new HashSet<>();
22+
int idx = 0;
23+
24+
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
25+
dfs(root);
26+
return new ArrayList<>(repeat);
27+
}
28+
29+
private int dfs(TreeNode node) {
30+
if (node == null)
31+
return 0;
32+
33+
int[] tri = {node.val, dfs(node.left), dfs(node.right)};
34+
String hash = Arrays.toString(tri);
35+
if (seen.containsKey(hash)) {
36+
Pair<TreeNode, Integer> pair = seen.get(hash);
37+
repeat.add(pair.getKey());
38+
return pair.getValue();
39+
} else {
40+
seen.put(hash, new Pair<>(node, ++idx));
41+
return idx;
42+
}
43+
}
44+
}
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# [652. Find Duplicate Subtrees](https://leetcode.com/problems/find-duplicate-subtrees/)
2+
3+
4+
5+
Complexity Analysis:
6+
7+
- Time Complexity: $O(n)$. $n$ is the amount of nodes.
8+
- Space Complexity: $O(n)$. Hash map costs $O(n)$ space complexity.
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [653. Two Sum IV - Input is a BST](https://leetcode.com/problems/two-sum-iv-input-is-a-bst/)
2+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import java.util.ArrayList;
2+
import java.util.List;
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* public class TreeNode {
7+
* int val;
8+
* TreeNode left;
9+
* TreeNode right;
10+
* TreeNode() {}
11+
* TreeNode(int val) { this.val = val; }
12+
* TreeNode(int val, TreeNode left, TreeNode right) {
13+
* this.val = val;
14+
* this.left = left;
15+
* this.right = right;
16+
* }
17+
* }
18+
*/
19+
class TwoSumIvInputIsABst {
20+
private void inOrder(TreeNode root, List<Integer> nums) {
21+
if (root == null) return;
22+
inOrder(root.left, nums);
23+
nums.add(root.val);
24+
inOrder(root.right, nums);
25+
}
26+
27+
public boolean findTarget(TreeNode root, int k) {
28+
List<Integer> nums = new ArrayList<>();
29+
inOrder(root, nums);
30+
int i = 0, j = nums.size() - 1;
31+
while (i < j) {
32+
int sum = nums.get(i) + nums.get(j);
33+
if (sum == k) return true;
34+
if (sum < k) i++;
35+
else j--;
36+
}
37+
return false;
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import java.util.ArrayList;
2+
import java.util.List;
3+
4+
class FindKClosestElements {
5+
public List<Integer> findClosestElements(int[] arr, int k, int x) {
6+
List<Integer> res = new ArrayList<>();
7+
int low = 0, high = arr.length - 1;
8+
while (high - low >= k) {
9+
int diffLow = Math.abs(arr[low] - x);
10+
int diffHigh = Math.abs(arr[high] - x);
11+
if (diffLow <= diffHigh) high--;
12+
else low++;
13+
}
14+
while (low <= high) res.add(arr[low++]);
15+
return res;
16+
}
17+
}
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [658. Find K Closest Elements](https://leetcode.com/problems/find-k-closest-elements/)
2+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [659. Split Array into Consecutive Subsequences](https://leetcode.com/problems/split-array-into-consecutive-subsequences/)
2+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
import java.util.PriorityQueue;
4+
5+
class SplitArrayIntoConsecutiveSubsequences {
6+
public boolean isPossible(int[] nums) {
7+
if (nums.length < 3) return false;
8+
Map<Integer, Integer> map = new HashMap<>();
9+
for (int num : nums) {
10+
map.put(num, map.getOrDefault(num, 0) + 1);
11+
}
12+
PriorityQueue<Integer> pq = new PriorityQueue<>(map.keySet().size());
13+
pq.addAll(map.keySet());
14+
15+
while (!pq.isEmpty()) {
16+
int min = pq.peek();
17+
int count = 0;
18+
while (true) {
19+
if (!map.containsKey(min)) {
20+
if (count < 3) return false;
21+
break;
22+
}
23+
map.put(min, map.get(min) - 1);
24+
count++;
25+
if (map.get(min) == 0) {
26+
if (pq.peek() != null && min != pq.peek()) return false;
27+
pq.poll();
28+
}
29+
if (map.containsKey(min + 1) && map.get(min) + 1 > map.get(min + 1)) {
30+
if (count < 3) return false;
31+
break;
32+
}
33+
min++;
34+
}
35+
}
36+
return true;
37+
}
38+
}

0 commit comments

Comments
 (0)