📣 VIP通行证夏日特惠 限时立减$68
楼主: melody_qyao
跳转到指定楼层
上一主题 下一主题
收起左侧

发一个yelp的skype电面面经,已跪

🔗
zws0818 2015-7-20 23:23:48 | 只看该作者
全局:
melody_qyao 发表于 2015-7-20 14:29
new grad,自己勾搭的HR,没有内推

HR你从哪里找到的?
回复

使用道具 举报

🔗
notturno 2015-7-21 01:06:08 | 只看该作者
全局:
这题还好吧,先sort,然后backtracking
如果start的值已经大于target,直接返回false(默认target是正数)

还有就是同一个得分能否重复使用
如果不能重复使用,就在dfs的循环里面加一个判断
如果可以重复使用,先把数组转存为一个没有duplicate的list
回复

使用道具 举报

🔗
 楼主| melody_qyao 2015-7-21 02:32:28 | 只看该作者
全局:
zws0818 发表于 2015-7-20 23:23
HR你从哪里找到的?

Linkedin
回复

使用道具 举报

🔗
 楼主| melody_qyao 2015-7-21 02:34:46 | 只看该作者
全局:
FH9410 发表于 2015-7-20 16:42
public boolean isPossible(int[] nums, int target) {
                if (nums == null || nums.length == 0) {
                         ...

for loop里面的递归调用那里,应该是i而不是i+1吧,因为每个possible score都是可以重复用无数次的
回复

使用道具 举报

🔗
 楼主| melody_qyao 2015-7-21 02:37:07 | 只看该作者
全局:
notturno 发表于 2015-7-21 01:06
这题还好吧,先sort,然后backtracking
如果start的值已经大于target,直接返回false(默认target是正数)
...

不是什么难题,但我递归写不好,所以卡了很久
回复

使用道具 举报

🔗
nano 2015-7-21 04:21:18 | 只看该作者
全局:
谢谢分享,题目真的是思路不难,写起来一遍bug free很不容易
没有大米给楼主了,分享一个c++ dp解法
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_set>
  4. #include <string.h>

  5. using namespace std;

  6. bool isPossible(int total_score, vector<int> score_list){
  7. if(total_score<=0)
  8. return total_score==0;

  9. unordered_set<int> score_pool(score_list.begin(),score_list.end());
  10. bool *valid_score=new bool[total_score+1];
  11. memset(valid_score,0,total_score+1);
  12. valid_score[0]=1;

  13. for(int i=1;i<=total_score;++i){
  14.         for(int j=0;j<i;++j){
  15.                 if(valid_score[j])
  16.                 valid_score[i]=(score_pool.find(i-j)!=score_pool.end());
  17.                 if(valid_score[i])
  18.                 break;
  19.         }
  20. }

  21. return valid_score[total_score];
  22. }

  23. int main() {
  24.         vector<int> score_list({3,5,3,3,5});
  25.         int total_score_list[]={6,11,7,0};
  26.        
  27.         for(int i=0;i<sizeof(total_score_list)/sizeof(int);++i){
  28.                 if(isPossible(total_score_list[i],score_list))
  29.                 cout<<"candidate score: "<<total_score_list[i]<<", yes"<<endl;
  30.                 else
  31.                 cout<<"candidate score: "<<total_score_list[i]<<", no"<<endl;
  32.         }
  33.         return 0;
  34. }
复制代码
回复

使用道具 举报

🔗
traceroute_su 2015-7-22 08:53:32 | 只看该作者
全局:
这应该是subset sum 问题吧
1. brute force的话 2^n
挨个选,选和不选 是两个选择对于每个数字来说,所以是2^n,iterative 位操作的话可以搞定,递归可以搞定。
2. dp 可以搞定 也就是背包问题 O(nC) n是需要的数字个数,也就是需要几个数字可以到达sum,C就是sum 这是个伪多项式解法,实质还是exponential的。
所以写哪个都可以。

dp方程: dp(i,j) 选i个数字,剩下j 的情况下是否是true
转移方程 dp(i,j) = dp(i+1,j-nums[i])|| dp(i+1,j)
意思就是选择当前数字和不选择当前数字的 or 操作
选择当然数字的话,数字index plus,sum减少,也就是j-nums[i]
不选当然数字的话,sum不减少,数字依旧plus
result就在dp(i,candidate), i 属于[0, num.length)
只要那一列存在了true,就是true
也就是说 那一列只要有数字可以凑成candidate就返回。


评分

参与人数 1大米 +2 收起 理由
alex007 + 2 思路清晰 赞一个

查看全部评分

回复

使用道具 举报

🔗
neomiracle 2015-7-23 00:58:37 | 只看该作者
全局:
感觉这个题解法基本上和经典硬币题思路一样
回复

使用道具 举报

🔗
neomiracle 2015-7-23 05:21:17 | 只看该作者
全局:
public class PossibleScore {
        static boolean res = false;
        public static boolean possible(int[] input, int target){
                if(input == null || input.length == 0){
                        return false;
                }
                Arrays.sort(input);
                helper(input, target, 0);
                return res;
        }

        private static void helper(int[] input, int target, int i) {
                if(res || target == 0){
                        res = true;
                        return;
                }
                if(i >= input.length || input[i] > target){
                        return;
                }
                helper(input, target - input[i], i);
                helper(input, target, i + 1);
        }
}
回复

使用道具 举报

🔗
chendanlan 2015-7-23 05:45:03 | 只看该作者
全局:
题主有在hacker rank做题目吗? 那个题目能够搜索网页做吗
回复

使用道具 举报

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

本版积分规则

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