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

Google intern 面经

🔗
mooc 2015-10-8 10:23:09 | 只看该作者
全局:
LZ, 除了出题之外,有问背景或者一些计算机基础知识吗?

补充内容 (2015-10-8 10:29):
还有,第二题和第三题需要写出代码来吗?感觉没啥可写的。。。
回复

使用道具 举报

🔗
goo 2015-10-8 17:31:56 | 只看该作者
全局:
写了第一 第三题 有错误或者优化请指正
  1. vector<int>plusone(vector<int> nums){
  2. int k=checkvalid(nums);
  3. if(k==-1) return vector<int>();
  4. if(k==nums.size()) nums[k-1]=1;
  5. else  if(nums[k]>0){
  6.        for(int i=nums.size()-1;i!=k;i--){
  7.         if(nums[i]==9)
  8.                   nums[i]=0;
  9.           else{nums[i]++;return nums;}
  10.                           }
  11.         if(nums[k]==9){
  12.                       nums[k]=0;
  13.                             if(k==0) nums.insert(nums.begin(),1);
  14.                                 else nums[k-1]=1;
  15.                                 }
  16.            else {nums[k]++;}
  17.                 }

  18. else if(nums[k]<0){
  19.                for(int i=nums.size()-1;i!=k;i--){
  20.         if(nums[i]==0)        nums[i]=9;
  21.           else{nums[i]--;return nums;}
  22.                      }
  23.         if(nums[k]==-1){nums[k]=0;
  24.                                    if(k+1<nums.size())   nums[k+1]*=-1;
  25.                                   }
  26.            else  nums[k]++;
  27. }
  28. return nums;
  29. }

  30. int  checkvalid(vector<int> nums){  //检查有效性并返回首个不为0的数字位置
  31. int k=0,len=nums.size();
  32. while(k<len &&nums[k]==0)
  33. k++;

  34. for(int i=k+1;i<len;i++){
  35. if(nums[i]<0) return -1;
  36. }
  37. return k;

  38. }




  39. //第三题  感觉这个ischange好蠢 求一个更好一点的算法
  40. vector<int> randarray(vector<int> nums){
  41. bool ischange=false;
  42. int k=nums.size();
  43. if(k<=1) return nums;
  44. while(!ischange){
  45. while(k>1){
  46. int rand_num=rand()%k;
  47. if(rand_num!=k-1) ischange=true;
  48. swap(nums[rand_num],nums[k-1]);
  49. k--;
  50.    }}
  51. return nums;


  52. }
复制代码

补充内容 (2015-10-8 17:42):
第三题代码忘了一句srand((unsigned)time(0));
回复

使用道具 举报

🔗
xnature 2015-10-9 02:45:33 | 只看该作者
全局:
goo 发表于 2015-10-8 17:31
写了第一 第三题 有错误或者优化请指正

补充内容 (2015-10-8 17:42):

第三题为啥要判断某个位置上的数字是否改变?我觉得也可以没有和其他元素调换啊。
回复

使用道具 举报

🔗
 楼主| maktf 2015-10-13 11:40:57 | 只看该作者
全局:
zxy_snow 发表于 2015-10-8 09:50
第三个题是要用洗牌算法么?还是随机生成排列?

就是随机生成排列,别想太复杂
回复

使用道具 举报

🔗
 楼主| maktf 2015-10-13 11:41:44 | 只看该作者
全局:
xnature 发表于 2015-10-8 09:59
第三题像是随机生成permutation?

第四题是外排序?

可以这么理解吧,第四题的关键应该是mapreduce
回复

使用道具 举报

🔗
 楼主| maktf 2015-10-13 11:42:14 | 只看该作者
全局:
mooc 发表于 2015-10-8 10:23
LZ, 除了出题之外,有问背景或者一些计算机基础知识吗?

补充内容 (2015-10-8 10:29):

就是做题,啥也没问,都要写代码,除了最后那个
回复

使用道具 举报

🔗
mooc 2015-10-13 23:14:10 | 只看该作者
全局:
lz,第二题改怎么做?
回复

使用道具 举报

🔗
cszeus 2015-10-14 03:04:39 | 只看该作者
全局:
我也想问问,第二题怎么做的啊?
回复

使用道具 举报

🔗
goo 2015-10-22 21:39:03 | 只看该作者
全局:
xnature 发表于 2015-10-9 02:45
第三题为啥要判断某个位置上的数字是否改变?我觉得也可以没有和其他元素调换啊。

我又看了一下我的代码 while循环这里的有问题
修改后
  1. vector<int> randarray(vector<int> nums){
  2. bool ischange=false;
  3. int k=nums.size();
  4. if(k<=1) return nums;
  5. srand((unsigned)time(0));
  6. while(!ischange){
  7. k=nums.size();
  8. while(k>1){
  9. int rand_num=rand()%k;
  10. if(rand_num!=k-1) ischange=true;
  11. swap(nums[rand_num],nums[k-1]);
  12. k--;
  13.    }}
  14. return nums;


  15. }
复制代码
这个ischange的作用是确保新生成的序列与输入序列不一样(至少有一位改变过),如果题意允许这种情况,就可以去掉ischange了,这题目没说清,可加可不加
回复

使用道具 举报

🔗
 楼主| maktf 2015-10-23 00:22:58 | 只看该作者
全局:
mooc 发表于 2015-10-13 23:14
lz,第二题改怎么做?

哦对, 忘了说query是要计算从1个点到另一个点组成的方阵的和
回复

使用道具 举报

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

本版积分规则

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