由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - LiveRamp笔试题求解——frog jump
相关主题
我又fail了面试Amazon First Round Phone Interview
vector, list, dequeGiven an int array and an int value. Find all pairs in arr
分享下G家第一个phone interview的题目A面经
问一道A家的面试题Yelp 面试
文本编辑器设计, 要求append, insert, delete均为O(1)过不了leetcode Zigzag Level Order Traversal
这题也可以DP 解吧?请教java linkedlist问题
Leet Code, three sum closest灭三哥也不容易
请教一个函数默认返回值的问题,纠结很久了请教一道, leetcode题.
相关话题的讨论汇总
话题: dp话题: int话题: pos话题: linkedlist话题: integer
进入JobHunting版参与讨论
1 (共1页)
i*****r
发帖数: 8
1
青蛙初始位置0,对岸坐标X,青蛙最远可跳距离为D,给出长度N的数组A[K],下标表示
时刻,值表示该时刻落叶的坐标。青蛙可以用落叶做跳板。返回青蛙最早到达对岸的时
刻。不能到达返回-1.
例如 D=3, X=5, A=[1,2,3], 返回1.
要求时间O(N),空间O(X)
我的做法是设一个长X的bool数组记录[0,X]每个位置有否有叶子。每个时刻看新落叶是
否在前面,能否跳上,不能跳上就记录,能跳上就更新青蛙位置p,然后从p+D倒搜有否
叶子,更新p直至无法前进。每次更新位置判断是否能跳到目的地。
我感觉我的做法最坏情况是O(ND)而不是O(N),求更好的思路。
j**7
发帖数: 143
2
// time O(N). space O(X)
public int solution(int[] A, int X, int D) {
LinkedList deque = new LinkedList();
int[] pos = new int[X + 1];
pos[0] = 0;
pos[X] = 0;
for (int i = 1; i < X; i++) {
pos[i] = -1;
}
for (int i = 0; i < A.length; i++) {
if (pos[A[i]] == -1) {
pos[A[i]] = i;
}
}
int[] DP = new int[X + 1];
DP[0] = 0;
deque.add(0);
for (int i = 1; i <= X; i++) {
while (deque.isEmpty() == false && deque.getFirst() + D < i) {
deque.removeFirst();
}
if (pos[i] == -1 || deque.isEmpty()) {
DP[i] = -1;
continue;
}
DP[i] = Math.max(pos[i], DP[deque.getFirst()]);
while (deque.isEmpty() == false && DP[deque.getLast()] >= DP[i])
{
deque.removeLast();
}
deque.addLast(i);
}
return DP[X];
}
j**7
发帖数: 143
1 (共1页)
进入JobHunting版参与讨论
相关主题
请教一道, leetcode题.文本编辑器设计, 要求append, insert, delete均为O(1)
发个evernote的code challenge这题也可以DP 解吧?
Binary Tree Level Order Traversal为什么老通不过Leet Code, three sum closest
leetcode做伤心了请教一个函数默认返回值的问题,纠结很久了
我又fail了面试Amazon First Round Phone Interview
vector, list, dequeGiven an int array and an int value. Find all pairs in arr
分享下G家第一个phone interview的题目A面经
问一道A家的面试题Yelp 面试
相关话题的讨论汇总
话题: dp话题: int话题: pos话题: linkedlist话题: integer