Redian新闻
>
jump game II原来可以这样做
avatar
jump game II原来可以这样做# JobHunting - 待字闺中
B*t
1
搞了半天DP,还是通不过大集合。原来就这么几行就解决了
int jump(int A[], int n) {
int hops = 0;
int end = n-1;
while(end)
{
for(int i = 0; i <= end; i++)
{
if((A[i]+i)>=end)
{
hops++;
end = i;
}
}
}
return hops;
}
这算是greedy吗?不熟悉greedy。准备去看看算法导论上的那章。
avatar
l*a
2
感觉while(end)会有潜在问题,最好直接用while(end<=n-1)之类的

【在 B********t 的大作中提到】
: 搞了半天DP,还是通不过大集合。原来就这么几行就解决了
: int jump(int A[], int n) {
: int hops = 0;
: int end = n-1;
: while(end)
: {
: for(int i = 0; i <= end; i++)
: {
: if((A[i]+i)>=end)
: {

avatar
B*t
3
这个end最终会等于0的吧。除非给的A[]数组不能从0跳到n-1

【在 l*****a 的大作中提到】
: 感觉while(end)会有潜在问题,最好直接用while(end<=n-1)之类的
avatar
c*t
4
你这个codes,看不懂啊。是greedy

【在 B********t 的大作中提到】
: 搞了半天DP,还是通不过大集合。原来就这么几行就解决了
: int jump(int A[], int n) {
: int hops = 0;
: int end = n-1;
: while(end)
: {
: for(int i = 0; i <= end; i++)
: {
: if((A[i]+i)>=end)
: {

avatar
B*t
5
就是先找到个中间点以这个点的最大值跳且可以跳出数组范围. 因为只要能跳出去就肯
定能一步到位
然后再以这个点为终点继续找。最后到起点就结束了

【在 c********t 的大作中提到】
: 你这个codes,看不懂啊。是greedy
avatar
c*t
6
明白了,原来是倒推。
可能有个bug,如果永远到不了,你这个是不是死循环了?

【在 B********t 的大作中提到】
: 就是先找到个中间点以这个点的最大值跳且可以跳出数组范围. 因为只要能跳出去就肯
: 定能一步到位
: 然后再以这个点为终点继续找。最后到起点就结束了

avatar
c*t
7
还有一个小问题,你这样是不是比正推多计算了?

【在 B********t 的大作中提到】
: 就是先找到个中间点以这个点的最大值跳且可以跳出数组范围. 因为只要能跳出去就肯
: 定能一步到位
: 然后再以这个点为终点继续找。最后到起点就结束了

avatar
B*t
8
如果永远到不了,说明这个数组本身就到不了。
比如已经找到了个中间点。但是从始点跳不到这个中间点。那肯定从始点跳不到终点。
因为如果从始点能跳到终点,要么经过这个中间点,要么在中间点后面跳,要么在这个
中间点前面跳,不管怎么跳都能在始点和中间点间找到下一个中间点

【在 c********t 的大作中提到】
: 明白了,原来是倒推。
: 可能有个bug,如果永远到不了,你这个是不是死循环了?

avatar
c*t
9
是的,我的意思,如果你能够handle一下error case,会更好,比如return -1啥的。过
leetcode是一个目标,但咱最终目标不还是interview嘛。

【在 B********t 的大作中提到】
: 如果永远到不了,说明这个数组本身就到不了。
: 比如已经找到了个中间点。但是从始点跳不到这个中间点。那肯定从始点跳不到终点。
: 因为如果从始点能跳到终点,要么经过这个中间点,要么在中间点后面跳,要么在这个
: 中间点前面跳,不管怎么跳都能在始点和中间点间找到下一个中间点

avatar
B*t
10
恩恩,懂了,哈哈

【在 c********t 的大作中提到】
: 是的,我的意思,如果你能够handle一下error case,会更好,比如return -1啥的。过
: leetcode是一个目标,但咱最终目标不还是interview嘛。

avatar
c*t
11
这道题挺有意思,我敢说90%的人都是开始用DP解,包括我,结果抓瞎了。。。
从不懂DP->懂DP->熟练应用DP->跳出DP局限
我还是2和3之间,很多大牛已经无招胜有招了。

【在 B********t 的大作中提到】
: 恩恩,懂了,哈哈
avatar
l*a
12
BSO自己懂DP

【在 c********t 的大作中提到】
: 这道题挺有意思,我敢说90%的人都是开始用DP解,包括我,结果抓瞎了。。。
: 从不懂DP->懂DP->熟练应用DP->跳出DP局限
: 我还是2和3之间,很多大牛已经无招胜有招了。

avatar
c*t
13
ft, 大牛扮猪吃老虎啊

【在 l*****a 的大作中提到】
: BSO自己懂DP
avatar
d*x
14
我来说一下最近的想法吧。
dp其实是在找“最优子结构”,这里有一个问题,就是很多题目其实在最优子结构上有
共性,但是当你提炼这个最优子结构的时候,基本上都会忽略掉问题的解的实际结构
而漂亮的贪心算法,基本都是通过对问题的解(的结构、特点)的实际考察得出的。对dp
的过分依赖可能会导致不能看到抽象下面的本质。
当然对于解决面试题,当遇到最优化问题的时候,还是要首先想到dp,面试嘛。

【在 c********t 的大作中提到】
: 这道题挺有意思,我敢说90%的人都是开始用DP解,包括我,结果抓瞎了。。。
: 从不懂DP->懂DP->熟练应用DP->跳出DP局限
: 我还是2和3之间,很多大牛已经无招胜有招了。

avatar
B*t
15
有道理。这题我用dp时,好像存的东西后面都没用到。。。。=。= 说明我没找到正确
的子结构吧

【在 d**********x 的大作中提到】
: 我来说一下最近的想法吧。
: dp其实是在找“最优子结构”,这里有一个问题,就是很多题目其实在最优子结构上有
: 共性,但是当你提炼这个最优子结构的时候,基本上都会忽略掉问题的解的实际结构
: 而漂亮的贪心算法,基本都是通过对问题的解(的结构、特点)的实际考察得出的。对dp
: 的过分依赖可能会导致不能看到抽象下面的本质。
: 当然对于解决面试题,当遇到最优化问题的时候,还是要首先想到dp,面试嘛。

avatar
B*t
16
我还看不到1啊。。。哈哈

【在 c********t 的大作中提到】
: 这道题挺有意思,我敢说90%的人都是开始用DP解,包括我,结果抓瞎了。。。
: 从不懂DP->懂DP->熟练应用DP->跳出DP局限
: 我还是2和3之间,很多大牛已经无招胜有招了。

avatar
c*t
17
嗯,有道理。看来还是要多做些题感觉感觉。

dp

【在 d**********x 的大作中提到】
: 我来说一下最近的想法吧。
: dp其实是在找“最优子结构”,这里有一个问题,就是很多题目其实在最优子结构上有
: 共性,但是当你提炼这个最优子结构的时候,基本上都会忽略掉问题的解的实际结构
: 而漂亮的贪心算法,基本都是通过对问题的解(的结构、特点)的实际考察得出的。对dp
: 的过分依赖可能会导致不能看到抽象下面的本质。
: 当然对于解决面试题,当遇到最优化问题的时候,还是要首先想到dp,面试嘛。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。