Skip to content

Commit 521e25d

Browse files
committed
weekly contest 325
1 parent ffc93db commit 521e25d

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-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 325](src/main/java/weekly/wk325.java) 数学 | 数学 | 动态规划 | 数学
89
* 🐎️ [weekly contest 324](src/main/java/weekly/wk324.java) 位运算 | 数学 | 图 | 完全二叉树性质
910
* 🐎️ [weekly contest 323](src/main/java/weekly/wk323.java) 排序 | 哈希 | 模拟 | 最小堆、Dijkstra最短路径
1011
* 🐎️ [weekly contest 322](src/main/java/weekly/wk322.java) 遍历 | 排序 | BFS | 二分图+BFS

src/main/java/weekly/wk325.java

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package weekly;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Set;
8+
9+
public class wk325 {
10+
11+
//ranking: 917 / 3873
12+
13+
//直接做就好了
14+
public int countDigits(int num) {
15+
int c = num;
16+
int ans = 0;
17+
while (c > 0) {
18+
19+
if (num % (c % 10) == 0) {
20+
ans++;
21+
}
22+
c /= 10;
23+
}
24+
return ans;
25+
}
26+
27+
//计算质因数
28+
public int distinctPrimeFactors(int[] nums) {
29+
Set<Integer> set = new HashSet<>();
30+
for (int num : nums) {
31+
for (int i = 2; i*i<=num; i++) {
32+
while (num % i == 0) {
33+
num /= i;
34+
set.add(i);
35+
}
36+
37+
}
38+
if (num>1){
39+
set.add(num);
40+
}
41+
}
42+
return set.size();
43+
}
44+
45+
46+
//用dp做,也可以贪心
47+
public int minimumPartition(String s, int k) {
48+
49+
int[] dp = new int[s.length() + 1];
50+
51+
Arrays.fill(dp, (int) 1e9 + 7);
52+
dp[0] = 0;
53+
54+
for (int left = 0; left < s.length(); left++) {
55+
long sum = 0;
56+
for (int right = left; right < s.length(); right++) {
57+
sum = sum * 10 + s.charAt(right) - '0';
58+
if (sum <= k) {
59+
dp[right + 1] = Math.min(dp[right + 1], dp[left] + 1);
60+
} else {
61+
break;
62+
}
63+
}
64+
}
65+
return dp[s.length()] == (int) 1e9 + 7 ? -1 : dp[0];
66+
}
67+
68+
69+
//预处理所有质数(埃氏筛)+计算质数间隔
70+
public int[] closestPrimes(int left, int right) {
71+
72+
boolean[] prime = isPrime(right);
73+
List<Integer> list = new ArrayList<>();
74+
for (int i = 0; i < prime.length; i++) {
75+
if (prime[i] && i >= left && i <= right) {
76+
list.add(i);
77+
}
78+
}
79+
if (list.size() < 2) return new int[]{-1, -1};
80+
int min = Integer.MAX_VALUE;
81+
int[] ans = new int[2];
82+
83+
for (int i = 1; i < list.size(); i++) {
84+
if (list.get(i) - list.get(i - 1) < min) {
85+
min = list.get(i) - list.get(i - 1);
86+
ans = new int[]{list.get(i-1), list.get(i )};
87+
}
88+
}
89+
return ans;
90+
}
91+
92+
public static boolean[] isPrime(int n) {
93+
boolean[] arr = new boolean[n + 1];
94+
// 1:质数 0:非质数
95+
Arrays.fill(arr, true);
96+
arr[1]=false;
97+
for (int i = 2; i <= n; i++) {
98+
if (arr[i]) {
99+
// 将i的倍数去除掉
100+
for (int j = i + i; j <= n; j += i) {
101+
arr[j] = false;
102+
}
103+
}
104+
}
105+
return arr;
106+
}
107+
108+
}

0 commit comments

Comments
 (0)