Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 42f7ad6

Browse files
20200924
1 parent c778648 commit 42f7ad6

File tree

4 files changed

+112
-0
lines changed

4 files changed

+112
-0
lines changed

‎Java/14.longest-common-prefix.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* @lc app=leetcode id=14 lang=java
3+
*
4+
* [14] Longest Common Prefix
5+
*/
6+
7+
// @lc code=start
8+
class Solution {
9+
public String longestCommonPrefix(String[] strs) {
10+
if (strs == null || strs.length == 0) return "";
11+
for (int i = 0; i < strs[0].length(); ++i) {
12+
char c = strs[0].charAt(i);
13+
for (int j = 1; j < strs.length; ++j) {
14+
if (i == strs[j].length() || strs[j].charAt(i) != c) {
15+
return strs[0].substring(0, i);
16+
}
17+
}
18+
}
19+
return strs[0];
20+
}
21+
}
22+
// @lc code=end
23+

‎Java/818.race-car-dp-solution.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* @lc app=leetcode id=818 lang=java
3+
*
4+
* [818] Race Car
5+
*/
6+
7+
// @lc code=start
8+
class Solution {
9+
/*
10+
dp: 子问题: 到某一个位置之后restart(掉头,速度重置)
11+
dp[t][d]: 从当前位置走到target并面向d(left = 0, right = 1)的最小action
12+
dp[t][d] = min(dp[i][0] + 2 + dp[t - i][d], (2:掉头再掉头)
13+
dp[i][1] + 1 + dp[t - i][d])
14+
time: O(n^2)
15+
space: O(n)
16+
*/
17+
public int racecar(int target) {
18+
if (target == 0) return 0;
19+
int[][] dp = new int[target + 1][2];
20+
for (int t = 1; t <= target; ++t) {
21+
int n = (int)Math.ceil(Math.log(t + 1) / Math.log(2));
22+
if ((1 << n) == t + 1) {
23+
// 一直加速可以到
24+
dp[t][0] = n;
25+
dp[t][1] = n + 1;
26+
continue;
27+
}
28+
// 需要倒车
29+
int l = (1 << n) - 1 - t;
30+
dp[t][0] = n + 1 + Math.min(dp[l][1], dp[l][0] + 1);
31+
dp[t][1] = n + 1 + Math.min(dp[l][0], dp[l][1] + 1);
32+
// 遍历所有可能的restart
33+
for (int i = 1; i < t; ++i) {
34+
for (int d = 0; d <= 1; ++d) {
35+
dp[t][d] = Math.min(dp[t][d], Math.min(
36+
dp[i][0] + 2 + dp[t - i][d],
37+
dp[i][1] + 1 + dp[t - i][d]));
38+
}
39+
}
40+
}
41+
return Math.min(dp[target][0], dp[target][1]);
42+
}
43+
}
44+
// @lc code=end
45+

‎Java/818.race-car.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* @lc app=leetcode id=818 lang=java
3+
*
4+
* [818] Race Car
5+
*/
6+
7+
// @lc code=start
8+
class Solution {
9+
/*
10+
将A和R看作每一步的两个状态,用BFS来找最短路径
11+
time: O(2^n)
12+
space: O(2^n)
13+
*/
14+
public int racecar(int target) {
15+
Queue<int[]> q = new LinkedList<>();
16+
q.offer(new int[]{0, 1});
17+
Set<String> visited = new HashSet<>();
18+
visited.add("0_1");
19+
int step = 0;
20+
while (!q.isEmpty()) {
21+
int size = q.size();
22+
while (size-- > 0) {
23+
int[] cur = q.poll();
24+
int pos = cur[0];
25+
int speed = cur[1];
26+
if (pos == target) return step;
27+
// A
28+
int pos1 = pos + speed;
29+
int speed1 = speed * 2;
30+
q.offer(new int[]{pos1, speed1}); // 加进visited数组会超时
31+
// R
32+
int speed2 = speed > 0 ? -1 : 1;
33+
if (visited.add(pos + "_" + speed2)) {
34+
q.offer(new int[]{pos, speed2});
35+
}
36+
}
37+
step++;
38+
}
39+
return -1;
40+
}
41+
}
42+
// @lc code=end
43+

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
[221. Maximal Square](https://leetcode.com/problems/maximal-square/) | [从对应边长找状态转移方程](https://github.com/Yukinichi/leetcode/blob/master/Java/221.maximal-square.java)
5151
[1143. Longest Common Subsequence](https://leetcode.com/problems/longest-common-subsequence/) | [LCS问题](https://github.com/Yukinichi/leetcode/blob/master/Java/1143.longest-common-subsequence.java)
5252
[1312. Minimum Insertion Steps to Make a String Palindrome](https://leetcode.com/problems/minimum-insertion-steps-to-make-a-string-palindrome/) | [区间dp(小区间->大区间)](https://github.com/Yukinichi/leetcode/blob/master/Java/1312.minimum-insertion-steps-to-make-a-string-palindrome.java)
53+
[818. Race Car](https://leetcode.com/problems/race-car/) | [BFS找最短路径](https://github.com/Yukinichi/leetcode/blob/master/Java/818.race-car.java) \| [DP](https://github.com/Yukinichi/leetcode/blob/master/Java/818.race-car-dp-solution.java)
5354

5455

5556
## Fenwick Tree / Binary Indexed Tree(BIT)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /