查看: 2202| 回复: 13
跳转到指定楼层
上一主题 下一主题
收起左侧

google 面试一道 求大神帮忙解解

头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽

上一篇:Amazon OA 2 视频非常卡 怎么办?
下一篇:关于binary tree level order traversal的变形题
全局:
本帖最后由 宝贝忆彼岸 于 2015-11-10 02:55 编辑

        public  int findMaxSum(Stack<Integer> stack1,Stack<Integer> stack2,int n){
                if(n == 0 || (stack1.isEmpty() && stack2.isEmpty())){
                        return 0;
                }
                int res = 0;
                if(!stack1.isEmpty()){
                        int temp = stack1.pop();
                        int sum = temp + findMaxSum(stack1,stack2,n-1);
                        if(res < sum){
                                res = sum;
                        }
                        stack1.push(temp);
                }
                if(!stack2.isEmpty()){
                        int temp = stack2.pop();
                        int sum = temp + findMaxSum(stack1,stack2,n-1);
                        if(res < sum){
                                res = sum;
                        }
                        stack2.push(temp);
                }
                return res;
        }
用递归写了一个,不知道有没有DP的解法
看错了,是k个stack,上面的做法是2个的,k个的一样的思路
public static int findMaxSum(List<Stack<Integer>> stacks,int n){
                if(n == 0){
                        return 0;
                }
                int length = stacks.size();
                int res = Integer.MIN_VALUE;
                for(int i=0;i<length;i++){
                        Stack<Integer> cur = stacks.get(i);
                        if(!cur.isEmpty()){
                                int temp = cur.pop();
                                int sum = temp + findMaxSum(stacks,n-1);
                                if(sum > res){
                                        res = sum;
                                }
                                cur.push(temp);
                        }
                }
                return res;
        }

回复

使用道具 举报

推荐
cptcpt 2015-11-30 13:55:02 | 只看该作者
全局:
宝贝忆彼岸 发表于 2015-11-10 02:17
public  int findMaxSum(Stack stack1,Stack stack2,int n){
                if(n == 0 || (stac ...

你这是从stack1取一个,然后从stack2取下一个吧?楼主取的N个是不是都必须出自同一个stack?而且是stack顶部?
回复

使用道具 举报

🔗
xiaozhuxiaozhu 2015-11-10 01:54:17 | 只看该作者
全局:
本帖最后由 xiaozhuxiaozhu 于 2015-11-10 02:28 编辑

理解错题了。
回复

使用道具 举报

🔗
z928czzc 2015-11-10 02:05:38 | 只看该作者
全局:
感觉像是NP问题,只能用recusrion去try所有取法的combination? 是不是还有别的条件。。。
回复

使用道具 举报

🔗
hu4 2015-11-10 02:11:12 | 只看该作者
全局:
n等于2的时候不是700+10吗
回复

使用道具 举报

🔗
z928czzc 2015-11-10 02:16:30 | 只看该作者
全局:
hu4 发表于 2015-11-10 02:11
n等于2的时候不是700+10吗

stack 是说要先取出上面的coin,之后才能拿下面的。

题意大概就是有k堆coin,拿n个,但是是最上面的n个(可以是不同堆)
回复

使用道具 举报

🔗
xiaozhuxiaozhu 2015-11-10 02:23:39 | 只看该作者
全局:
宝贝忆彼岸 发表于 2015-11-10 02:17
public  int findMaxSum(Stack stack1,Stack stack2,int n){
                if(n == 0 || (stack1.isEmpty() && stack ...

原题是k stacks吧
回复

使用道具 举报

🔗
sxh53 2015-11-10 02:27:03 | 只看该作者
全局:
本帖最后由 sxh53 于 2015-11-9 13:29 编辑

一个简单解法是:
假设我从stack1里面取A个数 stack2里取B个数。 A+B=n 求怎么去解这个A和B。
再仔细想,就首先算出如果都从A取的sum数组 比如这个题是[0,1, 5, 705, 708] 然后再算出都从B取i个数的sum的数组。[0,5, 15,21]
然后根据n的值 two pointers。互相移动 然后keep track max就好了。

For k stacks...求楼下支招。
回复

使用道具 举报

🔗
宝贝忆彼岸 2015-11-10 02:55:51 | 只看该作者
全局:

哦哦,对,看错了,不过k个也是一样的解法,回复里面改正了
回复

使用道具 举报

🔗
leilater 2015-11-30 11:49:08 | 只看该作者
全局:
宝贝忆彼岸 发表于 2015-11-10 02:55
哦哦,对,看错了,不过k个也是一样的解法,回复里面改正了

这个方法太好了!想了半天没弄明白时间复杂度该怎么分析呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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