Skip to content

Commit 44f0bfb

Browse files
committed
weekly contest 382
1 parent 59e1c57 commit 44f0bfb

File tree

4 files changed

+113
-3
lines changed

4 files changed

+113
-3
lines changed

Diff for: README.md

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ 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+
9+
* 🐼 [weekly contest 381](src/main/java/weekly/wk381.java) 遍历 | 枚举 | 数学 | 贪心
710
* 🐼 [weekly contest 381](src/main/java/weekly/wk381.java) 贪心 | 贪心 | floyd
811
* 🐼 [weekly contest 380](src/main/java/weekly/wk380.java) 遍历 | kmp | 二分+数位dp | kmp+二分
912
* 🐼 [weekly contest 379](src/main/java/weekly/wk379.java) 遍历 | 贪心 | 分类

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

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package weekly;
22

3-
import sun.security.krb5.internal.APRep;
4-
53
import java.util.ArrayList;
64
import java.util.Arrays;
75
import java.util.HashMap;

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

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package weekly;
22

3-
import com.sun.xml.internal.xsom.impl.scd.Iterators;
43

54
import java.util.Arrays;
65
import java.util.HashMap;

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

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package weekly;
2+
3+
import java.util.Arrays;
4+
import java.util.HashMap;
5+
import java.util.HashSet;
6+
import java.util.Map;
7+
import java.util.Set;
8+
9+
public class wk382 {
10+
//遍历
11+
public int countKeyChanges(String s) {
12+
int ans = 0;
13+
for (int i = 1; i < s.length(); i++) {
14+
if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(i - 1))) {
15+
ans++;
16+
}
17+
}
18+
return ans;
19+
}
20+
21+
22+
//枚举
23+
public int maximumLength(int[] nums) {
24+
Map<Integer, Integer> counter = new HashMap<>();
25+
for (int num : nums) {
26+
counter.put(num, counter.getOrDefault(num, 0) + 1);
27+
}
28+
Set<Integer> set = new HashSet<>();
29+
Integer ones = counter.getOrDefault(1, 0);
30+
int res = ones % 2 == 1 ? ones : ones - 1;
31+
Arrays.sort(nums);
32+
for (int i = 0; i < nums.length; i++) {
33+
int ans = 0;
34+
int num = nums[i];
35+
if (num == 1) continue;
36+
if (set.contains(num)) continue;
37+
while (true) {
38+
Integer count = counter.get(num);
39+
set.add(num);
40+
if (count == null) {
41+
ans -= 1;
42+
break;
43+
} else if (count >= 2) {
44+
ans += 2;
45+
} else if (count == 1) {
46+
ans += 1;
47+
break;
48+
}
49+
num *= num;
50+
}
51+
res = Math.max(ans, res);
52+
}
53+
return res;
54+
}
55+
56+
57+
//找规律
58+
public long flowerGame(int n, int m) {
59+
long na = 0, nb = 0;
60+
if (n % 2 == 1) {
61+
na = (n + 1) / 2;
62+
nb = n / 2;
63+
} else {
64+
na = (n) / 2;
65+
nb = n / 2;
66+
}
67+
68+
long ma = 0, mb = 0;
69+
if (m % 2 == 1) {
70+
ma = (m + 1) / 2;
71+
mb = m / 2;
72+
} else {
73+
ma = m / 2;
74+
mb = m / 2;
75+
}
76+
long res=0;
77+
res+= na*mb+nb*ma;
78+
return res;
79+
}
80+
81+
// 试填法
82+
public int minOrAfterOperations(int[] nums, int k) {
83+
int ans = 0;
84+
int mask = 0;
85+
for (int b = 29; b >= 0; b--) {
86+
mask |= 1 << b;
87+
int cnt = 0; // 操作次数
88+
int and = -1; // -1 的二进制全为 1
89+
for (int x : nums) {
90+
and &= x & mask;
91+
if (and != 0) {
92+
cnt++; // 合并 x,操作次数加一
93+
} else {
94+
and = -1; // 准备合并下一段
95+
}
96+
}
97+
if (cnt > k) {
98+
ans |= 1 << b; // 答案的这个比特位必须是 1
99+
mask ^= 1 << b; // 后面不考虑这个比特位
100+
}
101+
}
102+
return ans;
103+
}
104+
105+
106+
public static void main(String[] args) {
107+
wk382 w = new wk382();
108+
w.maximumLength(new int[]{5, 4, 1, 2, 2});
109+
}
110+
}

0 commit comments

Comments
 (0)