Skip to content

Commit 14a2e2c

Browse files
committed
weekly contest 314
1 parent 77a2c44 commit 14a2e2c

File tree

2 files changed

+119
-1
lines changed

2 files changed

+119
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +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-
* 🐑 [weekly contest 311](src/main/java/weekly/wk311.java) 排序 | 脑筋急转弯 | 前缀和 | 并查集
7+
* 🐼 [weekly contest 314](src/main/java/weekly/wk312.java) 数组 | 异或运算 | 贪心+栈 | DP
8+
* 🐑 [weekly contest 312](src/main/java/weekly/wk312.java) 排序 | 脑筋急转弯 | 前缀和 | 并查集
89
* 🐑 [weekly contest 311](src/main/java/weekly/wk311.java) 规律 | 滑动窗口 | 层序遍历 | 字典树
910
* 🐑 [weekly contest 310](src/main/java/weekly/wk310.java) 排序、hash表 | 贪心 | 贪心、差分数组 | 线段树+区间最大值
1011
* 🐼 [weekly contest 309](src/main/java/weekly/wk309.java) 数组 | DP/记忆化搜索 | 滑动窗口 | 双堆

src/main/java/weekly/wk314.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.ArrayDeque;
4+
import java.util.Deque;
5+
import java.util.Map;
6+
7+
public class wk314 {
8+
//ranking: 610 / 4838
9+
10+
//简单题,遍历比较
11+
public int hardestWorker(int n, int[][] logs) {
12+
int pre = 0;
13+
int ans = Integer.MAX_VALUE;
14+
int time = 0;
15+
for (int i = 0; i < logs.length; i++) {
16+
if (logs[i][1] - pre > time || (logs[i][1] - pre == time && logs[i][0] < ans)) {
17+
ans = logs[i][0];
18+
time = logs[i][1] - pre;
19+
}
20+
pre = logs[i][1];
21+
}
22+
return ans;
23+
}
24+
25+
//理解异或运算,a^a=0
26+
public int[] findArray(int[] pref) {
27+
int[] res = new int[pref.length];
28+
for (int i = 0; i < pref.length; i++) {
29+
res[i] = i==0?pref[i]:pref[i-1] ^ pref[i];
30+
}
31+
return res;
32+
}
33+
34+
// 单调栈
35+
/* static public String robotWithString(String s) {
36+
char[] chars = s.toCharArray();
37+
Deque<Integer> deque = new ArrayDeque<>();
38+
for (int i = 0; i < chars.length; i++) {
39+
while (!deque.isEmpty() && chars[deque.peekLast()] > chars[i]) {
40+
deque.pollLast();
41+
}
42+
deque.addLast(i);
43+
}
44+
Deque<Integer> d = new ArrayDeque<>();
45+
StringBuilder sb = new StringBuilder();
46+
for (int i = 0; i < chars.length; i++) {
47+
if (!deque.isEmpty() && deque.peekFirst() == i) {
48+
while (!d.isEmpty() && chars[d.peekLast()] <= chars[i]) {
49+
sb.append(chars[d.pollLast()]);
50+
}
51+
sb.append(chars[deque.pollFirst()]);
52+
while (!deque.isEmpty() && !d.isEmpty() && chars[d.peekLast()] <= chars[deque.peekFirst()]) {
53+
sb.append(chars[d.pollLast()]);
54+
}
55+
} else if (!deque.isEmpty() && deque.peekFirst() > i) {
56+
d.addLast(i);
57+
}
58+
}
59+
while (!d.isEmpty()) {
60+
sb.append(chars[d.pollLast()]);
61+
}
62+
return sb.toString();
63+
}*/
64+
65+
//贪心写法
66+
static public String robotWithString(String s) {
67+
char[] chars = s.toCharArray();
68+
char []mins=new char[s.length()+1];
69+
mins[mins.length-1]='z';
70+
for (int i = chars.length - 1; i >= 0; i--) {
71+
if(mins[i+1]<chars[i]){
72+
mins[i]=mins[i+1];
73+
}else {
74+
mins[i]=chars[i];
75+
}
76+
}
77+
StringBuilder sb=new StringBuilder();
78+
Deque<Character> deque=new ArrayDeque<>();
79+
for (int i = 0; i < s.length(); i++) {
80+
deque.addLast(chars[i]);
81+
while (!deque.isEmpty()&&deque.peekLast()<=mins[i+1]){
82+
sb.append(deque.pollLast());
83+
}
84+
}
85+
while (!deque.isEmpty()){
86+
sb.append(deque.pollLast());
87+
}
88+
89+
return sb.toString();
90+
}
91+
92+
93+
94+
95+
//dp记录mod k的所有数目
96+
public int numberOfPaths(int[][] grid, int k) {
97+
int mod=(int)1e9+7;
98+
int[][][] dp = new int[grid.length][grid[0].length][k];
99+
100+
dp[0][0][grid[0][0]%k]=1;
101+
102+
for (int i = 0; i < grid.length; i++) {
103+
for (int j = 0; j <grid[0].length; j++) {
104+
for (int kk = 0; kk < k; kk++) {
105+
if(i-1>=0) dp[i][j][(kk+grid[i][j])%k]+=dp[i-1][j][kk];
106+
if(j-1>=0) dp[i][j][(kk+grid[i][j])%k]+=dp[i][j-1][kk];
107+
dp[i][j][(kk+grid[i][j])%k]%=mod;
108+
}
109+
}
110+
}
111+
return dp[grid.length-1][grid[0].length-1][0];
112+
}
113+
114+
public static void main(String[] args) {
115+
robotWithString("bac");
116+
}
117+
}

0 commit comments

Comments
 (0)