Skip to content

Commit 7f2a033

Browse files
committed
weekly contest 302
1 parent 4dd3675 commit 7f2a033

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Record leetcode contest and ideas every week, and encourage yourself to think mo
44

55
leetcode url: <https://leetcode.cn/u/cctest/>
66

7+
8+
* ☀️ [weekly contest 302](src/main/java/weekly/wk302.java) Array | Heap | Heap| Math GCD
79
* ☀️ [weekly contest 301](src/main/java/weekly/wk301.java) Greegy | Hash Table | Two Pointers|Dynamic Programming+Combinatorics
810
* ☀️ [weekly contest 300](src/main/java/weekly/wk300.java) Hash Table | Simulation | DP | DP
911
*[weekly contest 299](src/main/java/weekly/wk299.java) Array | DP | DP | Enumeration + classification discussion

src/main/java/weekly/wk302.java

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package weekly;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.Comparator;
7+
import java.util.HashMap;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.PriorityQueue;
11+
12+
public class wk302 {
13+
14+
//ranking: 445 / 7092
15+
16+
//Array
17+
//简单题,统计每个数字出现多少次就行
18+
public int[] numberOfPairs(int[] nums) {
19+
int[] res = new int[2];
20+
int count[] = new int[102];
21+
for (int c : nums) {
22+
count[c]++;
23+
}
24+
for (int i : count) {
25+
res[0] += i / 2;
26+
res[1] += i % 2;
27+
}
28+
return res;
29+
}
30+
31+
//Heap
32+
//中等题,将数位和相同的放在一个优先队列中,弹出最大的两个
33+
public int maximumSum(int[] nums) {
34+
Map<Integer, PriorityQueue<Integer>> map = new HashMap<>();
35+
for (int num : nums) {
36+
int c = num;
37+
int sum = 0;
38+
while (num > 0) {
39+
sum += num % 10;
40+
num /= 10;
41+
}
42+
if (!map.containsKey(sum)) {
43+
map.put(sum, new PriorityQueue<>(Comparator.reverseOrder()));
44+
}
45+
map.get(sum).add(c);
46+
}
47+
int ans = -1;
48+
for (Map.Entry<Integer, PriorityQueue<Integer>> entry : map.entrySet()) {
49+
if (entry.getValue().size() < 2) continue;
50+
int max = entry.getValue().poll() + entry.getValue().poll();
51+
ans = Math.max(ans, max);
52+
}
53+
return ans;
54+
}
55+
56+
class help {
57+
String value;
58+
int index;
59+
60+
help(String v, int i) {
61+
value = v;
62+
index = i;
63+
}
64+
}
65+
//Heap
66+
//中等题,先把所有的剪裁结果都保存下来,然后取第k个即可
67+
public int[] smallestTrimmedNumbers(String[] nums, int[][] queries) {
68+
int m = nums[0].length();
69+
Map<Integer, List<help>> map = new HashMap<>();
70+
for (int i = 0; i < m; i++) {
71+
List<help> list = new ArrayList<>();
72+
for (int j = 0; j < nums.length; j++) {
73+
String substring = nums[j].substring(i);
74+
list.add(new help(substring, j));
75+
}
76+
map.put(nums[0].length() - i, list);
77+
}
78+
79+
for (List<help> value : map.values()) {
80+
Collections.sort(value, (a, b) -> a.value.compareTo(b.value));
81+
}
82+
83+
84+
int[] res = new int[queries.length];
85+
for (int i = 0; i < queries.length; i++) {
86+
int[] query = queries[i];
87+
List<help> list = map.get(query[1]);
88+
89+
res[i] = list.get(query[0] - 1).index;
90+
}
91+
return res;
92+
}
93+
94+
private static long gcd2(long a, long b) {
95+
return (a == 0 ? b : gcd2(b % a, a));
96+
}
97+
98+
//MATH
99+
//困难提不困难,求numsDivide的最大公因数,nums从小往大遍历,看哪个能整除即可
100+
public int minOperations(int[] nums, int[] numsDivide) {
101+
Arrays.sort(nums);
102+
103+
int pre = numsDivide[0];
104+
for (int i = 0; i < numsDivide.length; i++) {
105+
pre = (int) gcd2(pre, numsDivide[i]);
106+
}
107+
for (int i = 0; i < nums.length; i++) {
108+
if(pre%nums[i]==0) return i;
109+
}
110+
return -1;
111+
}
112+
113+
public static void main(String[] args) {
114+
115+
}
116+
117+
}

0 commit comments

Comments
 (0)