Skip to content

Commit d7d93bc

Browse files
committed
weekly contest 336
1 parent 3f088df commit d7d93bc

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ leetcode url: <https://leetcode.cn/u/cctest/>
66

77

88

9+
* 🐎️ [weekly contest 336](src/main/java/weekly/wk336.java) 模拟 | 排序 | 异或前缀和 | 贪心
910
* 🐎️ [weekly contest 335](src/main/java/weekly/wk335.java) 模拟 | 层序遍历 | 质数分解 | 多重背包
1011
* 🐎️ [weekly contest 334](src/main/java/weekly/wk334.java) 前缀和 | 取模 | 贪心 | Dijkstra
1112
* 🐎️ [weekly contest 333](src/main/java/weekly/wk333.java)

src/main/java/weekly/wk336.java

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package weekly;
2+
3+
import java.util.Arrays;
4+
import java.util.Comparator;
5+
import java.util.HashMap;
6+
import java.util.HashSet;
7+
import java.util.Map;
8+
import java.util.Set;
9+
10+
public class wk336 {
11+
//模拟
12+
public int vowelStrings(String[] words, int left, int right) {
13+
Set<Character> set = new HashSet<>();
14+
set.add('a');
15+
set.add('e');
16+
set.add('i');
17+
set.add('o');
18+
set.add('u');
19+
int ans = 0;
20+
for (int i = left; i <= right; i++) {
21+
String word = words[i];
22+
if (set.contains(word.charAt(0)) && set.contains(word.charAt(word.length() - 1))) {
23+
ans++;
24+
}
25+
}
26+
return ans;
27+
}
28+
29+
30+
//排序
31+
public int maxScore(int[] nums) {
32+
Arrays.sort(nums);
33+
long sum = 0;
34+
int ans = 0;
35+
for (int i = nums.length - 1; i >= 0; i--) {
36+
sum += nums[i];
37+
if (sum > 0) {
38+
ans++;
39+
} else {
40+
return ans;
41+
}
42+
}
43+
return ans;
44+
}
45+
46+
//异或前缀和
47+
public long beautifulSubarrays(int[] nums) {
48+
long ans = 0;
49+
int pre = 0;
50+
Map<Integer, Integer> map = new HashMap<>();
51+
map.put(0, 1);
52+
for (int i = 0; i < nums.length; i++) {
53+
pre ^= nums[i];
54+
if (map.containsKey(pre)) {
55+
Integer val = map.get(pre);
56+
ans += val;
57+
map.put(pre, val + 1);
58+
} else {
59+
map.put(pre, 1);
60+
}
61+
}
62+
return ans;
63+
}
64+
65+
//贪心 任务尽量在后面完成
66+
//也可以线段树
67+
static public int findMinimumTime(int[][] tasks) {
68+
Arrays.sort(tasks, (a, b) -> a[1] != b[1] ? a[1] - b[1] : b[0] - a[0]);
69+
int ans = 0;
70+
boolean[] dp = new boolean[2001];
71+
for (int i = 0; i < tasks.length; i++) {
72+
int[] task = tasks[i];
73+
int start = task[0];
74+
int end = task[1];
75+
int duration = task[2];
76+
for (int j = start; j <= end; j++) {
77+
if (dp[j]) {
78+
duration--;
79+
}
80+
}
81+
if (duration > 0) {
82+
for (int j = end; j >= start; j--) {
83+
if (!dp[j]) {
84+
duration--;
85+
dp[j] = true;
86+
ans++;
87+
}
88+
if (duration == 0) break;
89+
}
90+
}
91+
}
92+
return ans;
93+
}
94+
95+
public static void main(String[] args) {
96+
findMinimumTime(new int[][]{
97+
{2,3,1},{4,5,1},{1,5,2}
98+
});
99+
}
100+
}
101+
102+

0 commit comments

Comments
 (0)