Skip to content

Commit 527b9f4

Browse files
committed
weekly contest 372
1 parent 624a035 commit 527b9f4

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

Diff for: README.md

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

77

8+
* 🐼 [weekly contest 372](src/main/java/weekly/wk372.java) 模拟 | 数学 | 贪心 | 离线+二维偏序
89
* 🐼 [weekly contest 371](src/main/java/weekly/wk371.java) 暴力 | 模拟 | 贪心 | 字典树+异或
910
* 🐼 [weekly contest 370](src/main/java/weekly/wk370.java) 有向图 | 有向图 | dfs | 树状数组or线段树
1011
* 🐼 [weekly contest 369](src/main/java/weekly/wk369.java) 模拟 | 贪心 | dp

Diff for: src/main/java/weekly/wk372.java

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package weekly;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
import java.util.PriorityQueue;
7+
8+
public class wk372 {
9+
10+
//模拟
11+
public int findMinimumOperations(String s1, String s2, String s3) {
12+
int minLen = Math.min(s1.length(), Math.min(s2.length(), s3.length()));
13+
int ans = 0;
14+
for (int i = 0; i < minLen; i++) {
15+
if (s1.charAt(i) == s2.charAt(i) && s1.charAt(i) == s3.charAt(i)) {
16+
ans++;
17+
} else {
18+
break;
19+
}
20+
}
21+
if (ans == 0) return -1;
22+
return s1.length() - ans + s2.length() - ans + s3.length() - ans;
23+
}
24+
25+
26+
//数学
27+
public long minimumSteps(String s) {
28+
int left = 0;
29+
long ans = 0;
30+
for (int i = 0; i < s.length(); i++) {
31+
char c = s.charAt(i);
32+
if (c == '0') {
33+
ans += i - left;
34+
left++;
35+
}
36+
}
37+
return ans;
38+
}
39+
40+
//贪心
41+
public int maximumXorProduct(long a, long b, int n) {
42+
long x = 0;
43+
int mod = (int) 1e9 + 7;
44+
for (int i = n - 1; i >= 0; i--) {
45+
long aa = a & (1L << i);
46+
long bb = b & (1L << i);
47+
//都是0直接加0
48+
if ((aa ^ bb) == 0) {
49+
if (aa == 0) {
50+
x |= aa;
51+
}
52+
} else {
53+
//贪心
54+
if ((a ^ x) > (b ^ x)) {
55+
x |= aa;
56+
} else {
57+
x |= bb;
58+
}
59+
}
60+
}
61+
return (int) (((((a ^ x) % mod) * ((b ^ x) % mod))) % mod);
62+
}
63+
64+
65+
static public int[] leftmostBuildingQueries(int[] heights, int[][] queries) {
66+
int[] ans = new int[queries.length];
67+
List<int[]>[] left = new ArrayList[heights.length];
68+
for (int i = 0; i < left.length; i++) {
69+
left[i]=new ArrayList<>();
70+
}
71+
Arrays.fill(ans,-1);
72+
for (int i = 0; i < queries.length; i++) {
73+
int a = queries[i][0], b = queries[i][1];
74+
if (a > b) {
75+
int t = a;
76+
a = b;
77+
b = t;
78+
}
79+
if (a==b||heights[a] < heights[b]) {
80+
ans[i] = b;
81+
} else {
82+
left[b].add(new int[]{heights[a], i});
83+
}
84+
}
85+
PriorityQueue<int[]> priorityQueue = new PriorityQueue<>((a, b) -> a[0] - b[0]);
86+
87+
for (int i = 0; i < heights.length; i++) {
88+
while (!priorityQueue.isEmpty() && priorityQueue.peek()[0] < heights[i]) {
89+
ans[priorityQueue.poll()[1]] = i;
90+
}
91+
92+
priorityQueue.addAll(left[i]);
93+
}
94+
return ans;
95+
}
96+
97+
public static void main(String[] args) {
98+
leftmostBuildingQueries(new int[]{6, 4, 8, 5, 2, 7},new int[][]{
99+
{0,1},{0,3},{2,4},{3,4},{2,2}
100+
101+
});
102+
}
103+
}

0 commit comments

Comments
 (0)