一亩三分地

 找回密码 注册账号

扫描二维码登录本站


Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

码农求职神器Triplebyte
不用海投
内推多家公司面试

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 396|回复: 5
收起左侧

[其他] 动态规划数组声明

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (48)
 
 
0% (0)    👎

2019(1-3月)-EE硕士+3个月-1年 | Other| 码农类General全职@General在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
最近复习动态规划的时候发现一个问题,有的时候动态规划数组声明是m+1,有的时候是m, 什么时候声明m, 什么时候声明m+1呢? 谢谢大家
举个例子
Coin change 2  这个就是声明m+1
[color=rgba(0, 0, 0, 0.65)]You are given coins of different denominations and a total amount of money. Write a function to compute the number of combinations that make up that amount. You may assume that you have infinite number of each kind of coin.
[color=rgba(0, 0, 0, 0.65)]

[color=rgba(0, 0, 0, 0.650980392156863)]public class Solution {
[color=rgba(0, 0, 0, 0.650980392156863)]    /**
[color=rgba(0, 0, 0, 0.650980392156863)]    * @param amount: a total amount of money amount
[color=rgba(0, 0, 0, 0.650980392156863)]     * @param coins: the denomination of each coin. check 1point3acres for more.
[color=rgba(0, 0, 0, 0.650980392156863)]     * @return: the number of combinations that make up the amount
[color=rgba(0, 0, 0, 0.650980392156863)]     */
[color=rgba(0, 0, 0, 0.650980392156863)]    public int change(int amount, int[] coins) {
[color=rgba(0, 0, 0, 0.650980392156863)]        // write your code here
[color=rgba(0, 0, 0, 0.650980392156863)]        int[] dp = new int[amount + 1];
[color=rgba(0, 0, 0, 0.650980392156863)]        dp[0] = 1;
[color=rgba(0, 0, 0, 0.650980392156863)]        for (int i = 0; i < coins.length; i++) {
[color=rgba(0, 0, 0, 0.650980392156863)]            for (int j = coins; j <= amount; j++) {
[color=rgba(0, 0, 0, 0.650980392156863)]                dp[j] += dp[j - coins];
[color=rgba(0, 0, 0, 0.650980392156863)]            }
[color=rgba(0, 0, 0, 0.650980392156863)]        }
[color=rgba(0, 0, 0, 0.650980392156863)]        return dp[amount];
[color=rgba(0, 0, 0, 0.650980392156863)]    }
[color=rgba(0, 0, 0, 0.650980392156863)]}

[color=rgba(0, 0, 0, 0.650980392156863)]

Unique Paths 这个就是声明m


class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        for(int i = 0; i<n; i++){
            dp[0] = 1;
        }

        for(int i =0; i<m; i++){
            dp[0] = 1;
        }
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                 dp[j] = dp[i-1][j] + dp[j-1];
            }
        }
        return dp[m-1][n-1];
    }
}


评分

参与人数 1大米 +2 收起 理由
Lunluen + 2 给你点个赞!

查看全部评分


上一篇:求买 a collection of data science challenges
下一篇:请问大佬们,谁有oath 雅虎的内推,能帮忙内推下么,着急上岸/(ㄒoㄒ)/~~
我的人缘0
杨超越 2019-3-3 23:30:54 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   96% (1392)
 
 
3% (49)    👎
一般而言主要是考虑“什么都不选”的empty的情况下会选择m+1,但m+1的很多情况都是可以用size = m 同时判断是否越界来做。m-1的情况我好像遇到的很少。

评分

参与人数 1大米 +3 收起 理由
limao123 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0
 楼主| limao123 2019-3-3 23:48:50 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (48)
 
 
0% (0)    👎
被大神翻牌子~~~, 开心,可以没懂,可以具体讲讲吗?谢谢
回复

使用道具 举报

我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   90% (401)
 
 
9% (40)    👎
如果定义的时候是  前i个 那就是m+1 因为前0个默认是default情况

如果定义的是index i的情况下xxxx 那就是m.
这个看个人习惯. 而且你两者多试试就知道了. 有些时候如果需要用m+1 而你用m  就会要多余额外的判断corner cases

评分

参与人数 2大米 +5 收起 理由
Lunluen + 2 很有用的信息!
limao123 + 3 懂了,谢谢

查看全部评分

回复

使用道具 举报

我的人缘0
杨超越 2019-3-4 00:57:58 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   96% (1392)
 
 
3% (49)    👎
对应这个题,如果我定义dp[i][j]是我只用前面i个coins来拼出amount = j的最小coins数目
如果用m,那么就需要考虑我什么都不用还能拼出amount = j的情况。那么就需要考虑i-1的时候,也就是i=0时 i-1越界。
如果用m+1,那么我i其实是从i=1开始的 就不需要考虑i-1 = -1的情况了。
本质上没什么差别

评分

参与人数 1大米 +3 收起 理由
limao123 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0
groundzyy1 2019-3-4 02:30:45 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   96% (757)
 
 
3% (29)    👎
很早前做的总结,不知道现在还有效不

string (match)相关的是(M+1)*(N+1),其他都是M*N

M*N中讨论是有多少种方法可以的,绝大多可以O(N) space解决。

评分

参与人数 1大米 +3 收起 理由
limao123 + 3 懂你的意思了

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法 - 不要多加空格: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版||一亩三分地

GMT+8, 2019-9-17 23:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表