谈谈使用过的几款咖啡机

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
H1B/绿卡遥遥无期
又不想回国
来东南亚最大的互联网集团工作?
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
查看: 3700|回复: 36
收起左侧

FB面经

[复制链接] |试试Instant~ |关注本帖
我的人缘0
frostcake 发表于 2015-2-26 22:55:25 | 显示全部楼层 |阅读模式
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

2015(1-3月) 码农类General 硕士 全职@Facebook - 内推 - 技术电面  | Fail |

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

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
面经:
一个数组中将所有的非零元素移动到数组最前面,返回零的个数,比如[1,0,3,0,4,5,0,1] => [1,3,4,5,1, X,X,X] 顺序不要紧,移动之后数组后面几个元素可以是任意值

面试官要求移动次数最少,用了双指针,在求零的个数时候出了点bug,面试官也没指出来,当天就跪了

评分

参与人数 3大米 +19 收起 理由
hehe_makeit + 1 感谢分享!
cjlm007 + 3 感谢分享!
robend + 15

查看全部评分


上一篇:VMWare On-campus 面经,题还算有趣
下一篇:Factual Intern 电面II 20150205
我的人缘0
siren01 发表于 2015-3-19 20:02:45 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
  1.         public static int countMove(int[] arr){. 一亩-三分-地,独家发布
  2.                 if(arr==null || arr.length==0)
  3.                         return 0;. 一亩-三分-地,独家发布
  4.                 int left = 0; 来源一亩.三分地论坛.
  5.                 int right = arr.length-1;
  6.                 while(left<=right){
  7.                         while(left<=right && arr[left]!=0)
  8.                                 left++;
  9.                         while(left<=right && arr[right]==0)
  10.                                 right--;
  11.                         if(left<right){
  12.                                 int swap = arr[left];
  13.                                 arr[left] = arr[right];. 围观我们@1point 3 acres
  14.                                 arr[right] = swap;
  15.                         }
  16.                 }
  17.                 return arr.length-left;
  18.         }
复制代码
之前的那位说五分钟秒完bug free的大哥其实也没错,我觉得是看个人的写code习惯,有人写code如果一开始思路就对的那就不会出bug了,参考前人的思想,这代码感觉是最简的
回复 支持 1 反对 0

使用道具 举报

我的人缘0
siren01 发表于 2015-3-19 20:04:28 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
北航小涵 发表于 2015-3-5 06:56
刚试了一下 这个应该是最简洁的办法了。。吧?
还有更好的建议嘛?~~~~ 来源一亩.三分地论坛.
public class Solution {

你把while(i<j)改成while(i<=j) 就可以了,你看看我后面的代码
回复 支持 1 反对 0

使用道具 举报

我的人缘0
lulupan 发表于 2015-2-27 12:54:36 来自手机 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
这不就是remove duplicate 的变形么。。
回复 支持 1 反对 0

使用道具 举报

我的人缘0
sanguine 发表于 2015-2-27 01:16:37 | 显示全部楼层
  此人我要顶:
 
100% (4) 【我投】
  此人我要踩:
 
0% (0) 【我投】
移动之后数组后面几个元素可以是任意值是啥意思?
.本文原创自1point3acres论坛
后面几个元素不都是0 了吗?
回复 支持 0 反对 1

使用道具 举报

我的人缘0
sanguine 发表于 2015-2-27 01:38:07 | 显示全部楼层
  此人我要顶:
 
100% (4) 【我投】
  此人我要踩:
 
0% (0) 【我投】
求零的个数上果然容易出bug。。。。。。双指针交换位置后,需要prev++ post--再两个while循环,否则就多数了0  orz……

补充内容 (2015-2-26 14:43):
其实不需要一个count来计算,前后指针prev和post,当循环结束的时候,返回length - prev就是答案了orz……这样也不需要考虑各种情况了……
回复 支持 反对

使用道具 举报

我的人缘0
tonywen2014 发表于 2015-2-27 03:06:32 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
是用leetcode 里面sort color 的1 pass solution 那样做吗?
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| frostcake 发表于 2015-2-27 12:02:02 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
tonywen2014 发表于 2015-2-27 03:06
是用leetcode 里面sort color 的1 pass solution 那样做吗?

那样不行,我第一次也是这样做的,面试官要求优化
Mobile Apps Category (English)728x90
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| frostcake 发表于 2015-2-27 12:03:08 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
sanguine 发表于 2015-2-27 01:38
求零的个数上果然容易出bug。。。。。。双指针交换位置后,需要prev++ post--再两个while循环,否则就多数 ...

面试官要求比这样赋值次数更少的做法
回复 支持 反对

使用道具 举报

我的人缘0
houqingniao 发表于 2015-2-27 13:38:11 | 显示全部楼层
  此人我要顶:
 
0% (0) 【我投】
  此人我要踩:
 
100% (1) 【我投】
FB 这个也把楼主挂了 没天理啊。。。
双指针~~就完了么
回复 支持 反对

使用道具 举报

我的人缘0
fsc111 发表于 2015-2-27 13:59:13 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
frostcake 发表于 2015-2-27 12:03
面试官要求比这样赋值次数更少的做法
-google 1point3acres
请问两个数交换一次位置算是移动一次还是两次?以给出的例子为例,lz的解法交换了几次?
回复 支持 反对

使用道具 举报

我的人缘0
lulupan 发表于 2015-2-27 17:10:27 来自手机 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
houqingniao 发表于 2015-2-27 13:38
FB 这个也把楼主挂了 没天理啊。。。
双指针~~就完了么

这种题五分钟以内bug free是起码得吧
回复 支持 反对

使用道具 举报

我的人缘0
houqingniao 发表于 2015-2-28 05:56:21 | 显示全部楼层
  此人我要顶:
 
0% (0) 【我投】
  此人我要踩:
 
100% (1) 【我投】
lulupan 发表于 2015-2-27 17:10
这种题五分钟以内bug free是起码得吧

是不是五分钟bug-free 不敢说,但是这种题挂掉店面 有点说不过去

不过算那个多少个0 得仔细想想~~~很容易搞错
回复 支持 反对

使用道具 举报

我的人缘0
lulupan 发表于 2015-2-28 10:25:06 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
houqingniao 发表于 2015-2-28 05:56. 牛人云集,一亩三分地
是不是五分钟bug-free 不敢说,但是这种题挂掉店面 有点说不过去
. 1point3acres
不过算那个多少个0 得仔细想想~~~很 ...

1,3,4,5,1, X,X,X
既然XXX了再搞一个index直接赋值就可以吧,不用交换吧,总数除去最后index不就是0的个数嘛. 围观我们@1point 3 acres
FB就是看快准狠,这种原题别人都是五分钟bug free,有什么说不过去嘛
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| frostcake 发表于 2015-2-28 12:58:25 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
fsc111 发表于 2015-2-27 13:59
请问两个数交换一次位置算是移动一次还是两次?以给出的例子为例,lz的解法交换了几次?

交换了2次,准确的说是赋值了两次
回复 支持 反对

使用道具 举报

我的人缘0
zengm321 发表于 2015-2-28 14:40:30 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
fsc111 发表于 2015-2-27 13:59
请问两个数交换一次位置算是移动一次还是两次?以给出的例子为例,lz的解法交换了几次?

不用交换啊。以前是swap(a, a[j]), 现在a = a[j]就行了,反正后面是什么不care
i>=j的时候就结束,n-1-j就是0的个数
回复 支持 反对

使用道具 举报

我的人缘0
北航小涵 发表于 2015-3-5 06:38:21 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
sanguine 发表于 2015-2-26 12:38
求零的个数上果然容易出bug。。。。。。双指针交换位置后,需要prev++ post--再两个while循环,否则就多数 ...

不是,比如全是 0 和全是1的情况。就不对。
回复 支持 反对

使用道具 举报

我的人缘0
北航小涵 发表于 2015-3-5 06:45:23 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
zengm321 发表于 2015-2-28 01:40
不用交换啊。以前是swap(a, a[j]), 现在a = a[j]就行了,反正后面是什么不care
i>=j的时候就结束,n-1 ...

挺tricky哒其实,还有只有一个数1, 或者一个数0的情况。
回复 支持 反对

使用道具 举报

我的人缘0
北航小涵 发表于 2015-3-5 06:56:40 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
zengm321 发表于 2015-2-28 01:40
不用交换啊。以前是swap(a, a[j]), 现在a = a[j]就行了,反正后面是什么不care
i>=j的时候就结束,n-1 ...

刚试了一下 这个应该是最简洁的办法了。。吧?. 留学申请论坛-一亩三分地
还有更好的建议嘛?~~~~
public class Solution {
    public static int countMove(int[] a) {
        if (a == null || a.length == 0) {
            return 0;
        }

        int n = a.length;. Waral 博客有更多文章,
        int i = 0;
        int j = n - 1;
        while (i < j) {
            while (i < j && a != 0) {
                i++;
            }
            while (i < j && a[j] == 0) {
                j--;
            }
            a = a[j];. 围观我们@1point 3 acres
            j--;
        }

        if (a == 0) {
            return n - i;
        } else {. 一亩-三分-地,独家发布
            return n - i - 1;
        }
    }.留学论坛-一亩-三分地
}
回复 支持 反对

使用道具 举报

我的人缘0
北航小涵 发表于 2015-3-5 06:58:30 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
  1. 刚才好多代码掉了,用这个发一下吧。
复制代码
回复 支持 反对

使用道具 举报

我的人缘0
北航小涵 发表于 2015-3-5 07:00:02 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
Screen Shot 2015-03-04 at 5.59.12 PM.png . 1point3acres
回复 支持 反对

使用道具 举报

我的人缘0
ilovexiao77 发表于 2015-3-5 07:49:51 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
这题是数组remove duplicate。不需要前后两个指针吧。
来源一亩.三分地论坛.
补充内容 (2015-3-5 07:54):
public int countZero( int[] num ) {
. 1point3acres    int index = 0;
    for( int i = 0; i < num.length; ++i ) {-google 1point3acres
      if( num != 0 ) {
        num[index] = num;
        index++;
      }
    }
    int ret ...
回复 支持 反对

使用道具 举报

游客
请先登录

本版积分规则

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

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

关闭

一亩三分地推荐上一条 /3 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-6-23 09:03

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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