Skip to content

Commit a8ced44

Browse files
committed
weekly contest 332
1 parent 8aade9d commit a8ced44

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ Record leetcode contest and ideas every week, and encourage yourself to think mo
55
leetcode url: <https://leetcode.cn/u/cctest/>
66

77

8+
9+
* 🐎️ [weekly contest 332](src/main/java/weekly/wk332.java) 模拟 | 二分 | 哈希 | 前缀和
810
* 🐎️ [weekly contest 331](src/main/java/weekly/wk331.java) 优先队列 | 前缀和 | 二分 | 贪心
911
* 🐎️ [weekly contest 328](src/main/java/weekly/wk328.java) 遍历 | 二维差分数组 | 滑动窗口 | 树形DP
1012
* 🐎️ [weekly contest 327](src/main/java/weekly/wk327.java) 模拟 | 优先队列 | 技术 | 模拟+优先队列

src/main/java/weekly/wk332.java

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package weekly;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
public class wk332 {
11+
12+
//ranking: 1061 / 4547
13+
14+
15+
//模拟
16+
public long findTheArrayConcVal(int[] nums) {
17+
long res = 0;
18+
for (int i = 0; i < nums.length / 2; i++) {
19+
int end = nums.length - i - 1;
20+
if (i == end) {
21+
res += nums[i];
22+
} else {
23+
String s = nums[i] + "" + nums[end];
24+
res += Long.parseLong(s);
25+
}
26+
}
27+
return res;
28+
}
29+
30+
//不要被i < j 这个条件干扰,排序重新找就行
31+
public long countFairPairs(int[] nums, int lower, int upper) {
32+
long ans = 0;
33+
Arrays.sort(nums);
34+
for (int j = 0; j < nums.length; ++j) {
35+
int r = lowerBound(nums, j, upper - nums[j] + 1);
36+
int l = lowerBound(nums, j, lower - nums[j]);
37+
ans += r - l;
38+
}
39+
return ans;
40+
}
41+
42+
private int lowerBound(int[] nums, int right, int target) {
43+
int left = -1; // 开区间 (left, right)
44+
while (left + 1 < right) { // 区间不为空
45+
// 循环不变量:
46+
// nums[left] < target
47+
// nums[right] >= target
48+
int mid = (left + right) >>> 1;
49+
if (nums[mid] < target)
50+
left = mid; // 范围缩小到 (mid, right)
51+
else
52+
right = mid; // 范围缩小到 (left, mid)
53+
}
54+
return right;
55+
}
56+
57+
58+
//最长是32
59+
public int[][] substringXorQueries(String s, int[][] queries) {
60+
61+
Map<String, Integer> map = new HashMap<>();
62+
int[][] res = new int[queries.length][2];
63+
64+
for (int i = 0; i < s.length(); i++) {
65+
for (int j = 0; j < 32 && i + j <= s.length(); j++) {
66+
String substring = s.substring(i, i + j);
67+
if (!map.containsKey(substring)) {
68+
map.put(substring, i);
69+
}
70+
}
71+
}
72+
73+
74+
for (int i = 0; i < queries.length; i++) {
75+
int[] query = queries[i];
76+
int val = query[0] ^ query[1];
77+
String s1 = Integer.toBinaryString(val);
78+
int left = map.getOrDefault(s1, -1);
79+
if (left == -1) {
80+
res[i] = new int[]{-1, -1};
81+
} else {
82+
res[i][0] = left;
83+
res[i][1] = left + s1.length() - 1;
84+
}
85+
}
86+
return res;
87+
}
88+
89+
90+
//前后缀
91+
static public int minimumScore(String s, String t) {
92+
int[] right = new int[s.length() + 1];
93+
int r = t.length() - 1;
94+
for (int i = s.length() - 1; i >= 0; i--) {
95+
char c = s.charAt(i);
96+
if (r >= 0 && c == t.charAt(r)) {
97+
right[i] = t.length() - r;
98+
r--;
99+
}
100+
}
101+
102+
int l = 0;
103+
int lCount = 0;
104+
int res=t.length()-right[0];
105+
for (int i = 0; i < s.length(); i++) {
106+
char c = s.charAt(i);
107+
if (l < t.length() && c == t.charAt(l)) {
108+
lCount++;
109+
l++;
110+
}
111+
res = Math.min(res, Math.max(0,t.length() - right[i + 1] - lCount));
112+
}
113+
return res;
114+
}
115+
116+
public static void main(String[] args) {
117+
minimumScore("cbedceeeccd","ed");
118+
}
119+
}

0 commit comments

Comments
 (0)