亚麻OA求砸,面经神衣护体!


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
天天打游戏、照样领工资、还办H1B
这份工作你要不要?
把贵司招聘信息放这里
查看: 3238|回复: 36
收起左侧

FB面经

[复制链接] |试试Instant~ |关注本帖
frostcake 发表于 2015-2-26 22:55:25 | 显示全部楼层 |阅读模式

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

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

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

x
面经:
一个数组中将所有的非零元素移动到数组最前面,返回零的个数,比如[1,0,3,0,4,5,0,1] => [1,3,4,5,1, X,X,X] 顺序不要紧,移动之后数组后面几个元素可以是任意值
. 鍥磋鎴戜滑@1point 3 acres
面试官要求移动次数最少,用了双指针,在求零的个数时候出了点bug,面试官也没指出来,当天就跪了

评分

3

查看全部评分

siren01 发表于 2015-3-19 20:02:45 | 显示全部楼层
  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;. visit 1point3acres.com for more.
  6.                 while(left<=right){
  7.                         while(left<=right && arr[left]!=0)
  8.                                 left++;
  9.                         while(left<=right && arr[right]==0)
  10.                                 right--;. more info on 1point3acres.com
  11.                         if(left<right){
  12.                                 int swap = arr[left];.1point3acres缃
  13.                                 arr[left] = arr[right];
  14.                                 arr[right] = swap;
  15.                         }
  16.                 }
  17.                 return arr.length-left;
  18.         }
复制代码
之前的那位说五分钟秒完bug free的大哥其实也没错,我觉得是看个人的写code习惯,有人写code如果一开始思路就对的那就不会出bug了,参考前人的思想,这代码感觉是最简的
回复 支持 1 反对 0

使用道具 举报

siren01 发表于 2015-3-19 20:04:28 | 显示全部楼层
北航小涵 发表于 2015-3-5 06:56 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
刚试了一下 这个应该是最简洁的办法了。。吧?
还有更好的建议嘛?~~~~
public class Solution {

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

使用道具 举报

lulupan 发表于 2015-2-27 12:54:36 来自手机 | 显示全部楼层
这不就是remove duplicate 的变形么。。
回复 支持 1 反对 0

使用道具 举报

sanguine 发表于 2015-2-27 01:16:37 | 显示全部楼层
移动之后数组后面几个元素可以是任意值是啥意思?

后面几个元素不都是0 了吗?
回复 支持 0 反对 1

使用道具 举报

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

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

使用道具 举报

tonywen2014 发表于 2015-2-27 03:06:32 | 显示全部楼层
是用leetcode 里面sort color 的1 pass solution 那样做吗?
回复 支持 反对

使用道具 举报

 楼主| frostcake 发表于 2015-2-27 12:02:02 | 显示全部楼层
tonywen2014 发表于 2015-2-27 03:06
是用leetcode 里面sort color 的1 pass solution 那样做吗?

那样不行,我第一次也是这样做的,面试官要求优化
回复 支持 反对

使用道具 举报

 楼主| frostcake 发表于 2015-2-27 12:03:08 | 显示全部楼层
sanguine 发表于 2015-2-27 01:38
求零的个数上果然容易出bug。。。。。。双指针交换位置后,需要prev++ post--再两个while循环,否则就多数 ...
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
面试官要求比这样赋值次数更少的做法
回复 支持 反对

使用道具 举报

houqingniao 发表于 2015-2-27 13:38:11 | 显示全部楼层
FB 这个也把楼主挂了 没天理啊。。。
双指针~~就完了么
回复 支持 反对

使用道具 举报

fsc111 发表于 2015-2-27 13:59:13 | 显示全部楼层
frostcake 发表于 2015-2-27 12:03
面试官要求比这样赋值次数更少的做法

请问两个数交换一次位置算是移动一次还是两次?以给出的例子为例,lz的解法交换了几次?
回复 支持 反对

使用道具 举报

lulupan 发表于 2015-2-27 17:10:27 来自手机 | 显示全部楼层
houqingniao 发表于 2015-2-27 13:38.鐣欏璁哄潧-涓浜-涓夊垎鍦
FB 这个也把楼主挂了 没天理啊。。。. visit 1point3acres.com for more.
双指针~~就完了么

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

使用道具 举报

houqingniao 发表于 2015-2-28 05:56:21 | 显示全部楼层
lulupan 发表于 2015-2-27 17:10
这种题五分钟以内bug free是起码得吧

是不是五分钟bug-free 不敢说,但是这种题挂掉店面 有点说不过去
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
不过算那个多少个0 得仔细想想~~~很容易搞错
回复 支持 反对

使用道具 举报

lulupan 发表于 2015-2-28 10:25:06 | 显示全部楼层
houqingniao 发表于 2015-2-28 05:56.1point3acres缃
是不是五分钟bug-free 不敢说,但是这种题挂掉店面 有点说不过去. from: 1point3acres.com/bbs

不过算那个多少个0 得仔细想想~~~很 ...

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

使用道具 举报

 楼主| frostcake 发表于 2015-2-28 12:58:25 | 显示全部楼层
fsc111 发表于 2015-2-27 13:59
请问两个数交换一次位置算是移动一次还是两次?以给出的例子为例,lz的解法交换了几次?

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

使用道具 举报

zengm321 发表于 2015-2-28 14:40:30 | 显示全部楼层
fsc111 发表于 2015-2-27 13:59
请问两个数交换一次位置算是移动一次还是两次?以给出的例子为例,lz的解法交换了几次?
.1point3acres缃
不用交换啊。以前是swap(a, a[j]), 现在a = a[j]就行了,反正后面是什么不care
i>=j的时候就结束,n-1-j就是0的个数
回复 支持 反对

使用道具 举报

北航小涵 发表于 2015-3-5 06:38:21 | 显示全部楼层
sanguine 发表于 2015-2-26 12:38. 1point 3acres 璁哄潧
求零的个数上果然容易出bug。。。。。。双指针交换位置后,需要prev++ post--再两个while循环,否则就多数 ...

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

使用道具 举报

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

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

使用道具 举报

北航小涵 发表于 2015-3-5 06:56:40 | 显示全部楼层
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;. visit 1point3acres.com for more.
        }. 1point 3acres 璁哄潧

        int n = a.length;
        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];. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
            j--; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
        }

        if (a == 0) {
            return n - i;.鏈枃鍘熷垱鑷1point3acres璁哄潧
        } else {
            return n - i - 1;
        }.1point3acres缃
    }. Waral 鍗氬鏈夋洿澶氭枃绔,
}. From 1point 3acres bbs
回复 支持 反对

使用道具 举报

北航小涵 发表于 2015-3-5 06:58:30 | 显示全部楼层
  1. 刚才好多代码掉了,用这个发一下吧。
复制代码
回复 支持 反对

使用道具 举报

北航小涵 发表于 2015-3-5 07:00:02 | 显示全部楼层
Screen Shot 2015-03-04 at 5.59.12 PM.png
回复 支持 反对

使用道具 举报

ilovexiao77 发表于 2015-3-5 07:49:51 | 显示全部楼层
这题是数组remove duplicate。不需要前后两个指针吧。

补充内容 (2015-3-5 07:54):
public int countZero( int[] num ) {. Waral 鍗氬鏈夋洿澶氭枃绔,
    int index = 0;
    for( int i = 0; i < num.length; ++i ) {. From 1point 3acres bbs
      if( num != 0 ) {. 1point 3acres 璁哄潧
        num[index] = num;
        index++;. 鍥磋鎴戜滑@1point 3 acres
      }
    }
    int ret ...
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-10-21 22:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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