Skip to content

Commit ffc93db

Browse files
committed
weekly contest 324
1 parent 0295b26 commit ffc93db

File tree

2 files changed

+148
-0
lines changed

2 files changed

+148
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
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 324](src/main/java/weekly/wk324.java) 位运算 | 数学 | 图 | 完全二叉树性质
89
* 🐎️ [weekly contest 323](src/main/java/weekly/wk323.java) 排序 | 哈希 | 模拟 | 最小堆、Dijkstra最短路径
910
* 🐎️ [weekly contest 322](src/main/java/weekly/wk322.java) 遍历 | 排序 | BFS | 二分图+BFS
1011
* ☀️ [weekly contest 320](src/main/java/weekly/wk320.java) 模拟 | DFS | 贪心 | DP

src/main/java/weekly/wk324.java

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package weekly;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.Set;
9+
10+
public class wk324 {
11+
12+
//ranking: 1206 / 4167
13+
14+
//暴力
15+
/* public int similarPairs(String[] words) {
16+
List<int[]> list = new ArrayList<>();
17+
for (int i = 0; i < words.length; i++) {
18+
int[] count = new int[26];
19+
for (char c : words[i].toCharArray()) {
20+
count[c - 'a']++;
21+
}
22+
list.add(count);
23+
}
24+
25+
int ans = 0;
26+
for (int i = 0; i < words.length; i++) {
27+
int[] count = list.get(i);
28+
for (int j = i + 1; j < words.length; j++) {
29+
boolean flag = true;
30+
int[] count2 = list.get(j);
31+
for (int k = 0; k < count.length; k++) {
32+
if ((count[k] == 0 && count2[k] == 0) || (count[k] > 0 && count2[k] > 0)) {
33+
continue;
34+
} else {
35+
flag = false;
36+
break;
37+
}
38+
}
39+
if (flag) {
40+
System.out.println(i + " " + j);
41+
ans++;
42+
}
43+
}
44+
45+
}
46+
return ans;
47+
}*/
48+
49+
//位运算
50+
public int similarPairs(String[] words) {
51+
int ans=0;
52+
Map<Integer,Integer> map=new HashMap<>();
53+
for (int i = 0; i < words.length; i++) {
54+
int mask=0;
55+
for (char c : words[i].toCharArray()) {
56+
mask|=(1<<(c-'a'));
57+
}
58+
ans+=map.getOrDefault(mask,0);
59+
map.put(mask,map.getOrDefault(mask,0)+1);
60+
}
61+
return ans;
62+
}
63+
64+
public int smallestValue(int n) {
65+
int sum = 0;
66+
for (int i = 2, m = n; m > 1; i++) {
67+
while (m % i == 0) {
68+
m /= i;
69+
sum += i;
70+
}
71+
}
72+
return sum == n ? n : smallestValue(sum);
73+
}
74+
75+
public boolean isPossible(int n, List<List<Integer>> edges) {
76+
Map<Integer, Set<Integer>> map = new HashMap<>();
77+
for (List<Integer> edge : edges) {
78+
int a = edge.get(0);
79+
int b = edge.get(1);
80+
if (!map.containsKey(a)) map.put(a, new HashSet<>());
81+
if (!map.containsKey(b)) map.put(b, new HashSet<>());
82+
map.get(a).add(b);
83+
map.get(b).add(a);
84+
}
85+
List<Integer> list = new ArrayList<>();
86+
for (Map.Entry<Integer, Set<Integer>> entry : map.entrySet()) {
87+
if (entry.getValue().size() % 2 != 0) {
88+
//奇数的点
89+
list.add(entry.getKey());
90+
}
91+
}
92+
if (list.size() > 4 || list.size() % 2 != 0) {
93+
return false;
94+
}
95+
if (list.size() == 0) return true;
96+
if (list.size() == 2) {
97+
int a = list.get(0);
98+
int b = list.get(1);
99+
for (Map.Entry<Integer, Set<Integer>> entry : map.entrySet()) {
100+
if (!entry.getValue().contains(a) && !entry.getValue().contains(b)) {
101+
return true;
102+
}
103+
}
104+
return false;
105+
} else {
106+
int a = list.get(0);
107+
int b = list.get(1);
108+
int c = list.get(2);
109+
int d = list.get(3);
110+
return (check(a, b, map) && check(c, d, map)) || (check(a, c, map) && check(b, d, map)) || (check(a, d, map) && check(b, c, map));
111+
}
112+
}
113+
114+
boolean check(int a, int b, Map<Integer, Set<Integer>> map) {
115+
if (!map.get(a).contains(b)) {
116+
return true;
117+
}
118+
return false;
119+
}
120+
121+
122+
public int[] cycleLengthQueries(int n, int[][] queries) {
123+
int[] res = new int[queries.length];
124+
125+
for (int i = 0; i < queries.length; i++) {
126+
int a = queries[i][0];
127+
int b = queries[i][1];
128+
res[i] = findFather(a, b);
129+
}
130+
return res;
131+
}
132+
133+
public double log2(double N) {
134+
return Math.log(N) / Math.log(2);
135+
}
136+
137+
int findFather(int i, int j) {
138+
int res=0;
139+
while (i != j) {
140+
res++;
141+
if (i > j) i /= 2;
142+
else j /= 2;
143+
}
144+
return res;
145+
}
146+
147+
}

0 commit comments

Comments
 (0)