由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - L家phone面,悲剧
相关主题
贡献一道面试题目:找出在一个数组里面只出现1次的两个数字今天竟然把MULTIPLY(大数相乘)写完了,发帖庆祝
一道要求常数空间和O(n)时间的排序题这道题怎么解
大牛给个大数(+-*)的面试解答吧如何求一个整数阶乘的各位数字和
上一道我以前喜欢出的题目吧来发个我的Leetcode的Python答案吧
G一道题发一个Startup的面经 - Affirm
F面经贴几道老题目
问一道前几天在版上看见的题在整数数组中加运算符号和括号,求max
大整数相乘谁贴个bug free的code关于Leetcode
相关话题的讨论汇总
话题: int话题: return话题: niterrow话题: nitercol话题: nmid
进入JobHunting版参与讨论
1 (共1页)
s*********d
发帖数: 2406
1
没什么好说的,还是自己不行。
第一题
abstract class absClass
{
public int AddTwoNumbers(int Num1, int Num2)
{
return Num1 + Num2;
}
public abstract int MultiplyTwoNumbers(int Num1, int Num2);
}
实例化 absclass
interviewer 说 不需要用考到任何算法知识。只考java。
answer :
public class aaClass extends absClass {
public int MultiplyTwoNumbers(int Num1, int Num2){
int multiplyresult = 0 ;
multiplyresult=Num1*Num2;

return multiplyresult;
}
这个有什么问题?
Q2:经典题
Q2:
Given a sorted 2-D array (M x N) containing integers with the following
properties:
* All integers in any row are sorted left to right
* The first integer in any row is greater than the last integer in the
previous row
E.g.
1 3 5 7
10 11 16 20
23 30 34 50
我先说从last column search 再在row line search O(N+M);
interview说有better 方法。
我说可以用binary search。
他说combine both。 我就total lost了(我就没想出来怎么叫combine both)
死活想不出来 在m/2 n/2 开始binary search。
之后提出跟种方法。比如展开成1D 直接做binary search。得到否定答案。
说了用对角线 查找 也不是最优的。
interviewer 提示了说matrix 很大
谈论了半天不得要领。
直接先写程序,那时,心都凉了,紧张死了。后来连怎么算[][]size的搞错了。
哎。
肯定挂了。
讨论贴:
http://stackoverflow.com/questions/2457792/given-a-2d-array-sor
increasing-order-from-left-to-right-and-top-to-bottom
问个问题,在java 里2D是怎么放的? 如果实际上是1D存储的话。是不是用1D更快。
在讨论贴了好像O(logn))并不是比(n+M)更快。
谢谢
p*****2
发帖数: 21240
2
第一题是考溢出吗?
p*****2
发帖数: 21240
3
第二题两次binary search是不是就行了?
w****x
发帖数: 2483
4

第二题他说combine both是不是指的是当M, N很大的时候, 开始用binary search, 当
范围缩小后再用linear scan,因为数量小的时候linear scan效率更高? 不过放在这也没什么意
思, 毕竟不是像quick sort那样会产生很多小节点.
写程序不会叫你写二分的solution吧。。。

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

s*********d
发帖数: 2406
5
估计是了。这是个问题
public class aaClass extends absClass {
public long MultiplyTwoNumbers(int Num1, int Num2){
long multiplyresult = 0 ;
multiplyresult=Num1*Num2;

return multiplyresult;
}
y*******g
发帖数: 6599
6
你以前的答案是对的,这个错了。

【在 s*********d 的大作中提到】
: 估计是了。这是个问题
: public class aaClass extends absClass {
: public long MultiplyTwoNumbers(int Num1, int Num2){
: long multiplyresult = 0 ;
: multiplyresult=Num1*Num2;
:
: return multiplyresult;
: }

p*****2
发帖数: 21240
7

为什么还需要linear scan呢?

【在 w****x 的大作中提到】
:
: 第二题他说combine both是不是指的是当M, N很大的时候, 开始用binary search, 当
: 范围缩小后再用linear scan,因为数量小的时候linear scan效率更高? 不过放在这也没什么意
: 思, 毕竟不是像quick sort那样会产生很多小节点.
: 写程序不会叫你写二分的solution吧。。。

s******n
发帖数: 3946
8
第一题太搞了吧,就是要用add实现multiply,他没提示你???
第二题就是M*N一维数组的binary search。复杂度log(M*N)
s*********d
发帖数: 2406
9
我问了他要不要实现,他说不要的!说这题就靠java 基本

【在 s******n 的大作中提到】
: 第一题太搞了吧,就是要用add实现multiply,他没提示你???
: 第二题就是M*N一维数组的binary search。复杂度log(M*N)

w****x
发帖数: 2483
10

不知道面试官什么意思, 没太大必要用,比如quicksort当样本很小的时候用
insertsort是为了避免产生很多递归小节点, 这里就直接下来了没多大必要, 不知道
interviewer要什么结果, 可能interviewer随便说说的吧

【在 p*****2 的大作中提到】
:
: 为什么还需要linear scan呢?

相关主题
F面经今天竟然把MULTIPLY(大数相乘)写完了,发帖庆祝
问一道前几天在版上看见的题这道题怎么解
大整数相乘谁贴个bug free的code如何求一个整数阶乘的各位数字和
进入JobHunting版参与讨论
w****x
发帖数: 2483
11

为什么是一维数组??

【在 s*********d 的大作中提到】
: 我问了他要不要实现,他说不要的!说这题就靠java 基本
p*****2
发帖数: 21240
12

为什么一维数组?这个不是logN+logM的复杂度吗?这题L面过我,我就是用的logN+
logM的。

【在 s******n 的大作中提到】
: 第一题太搞了吧,就是要用add实现multiply,他没提示你???
: 第二题就是M*N一维数组的binary search。复杂度log(M*N)

y**********u
发帖数: 6366
13
第一题难道不用二进制???

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

b******v
发帖数: 1493
14
log(mn)=log(m)+log(n)

★ 发自iPhone App: ChineseWeb - 中文网站浏览器

【在 p*****2 的大作中提到】
:
: 为什么一维数组?这个不是logN+logM的复杂度吗?这题L面过我,我就是用的logN+
: logM的。

p*****2
发帖数: 21240
15

我数学太差了。呵呵。

【在 b******v 的大作中提到】
: log(mn)=log(m)+log(n)
:
: ★ 发自iPhone App: ChineseWeb - 中文网站浏览器

p*****2
发帖数: 21240
16

这个比较靠谱。不然没什么好考察的。

【在 y**********u 的大作中提到】
: 第一题难道不用二进制???
y*******g
发帖数: 6599
17
第一题什么都不用,主要用来拒三年制阿三的。
w****o
发帖数: 2260
18
第二题的2D Matrix 和这个网站上的数组不一样吧。你的这个数组更简单些。
http://stackoverflow.com/questions/2457792/given-a-2d-array-sor
这道题就做两次binary search就好了。先是最后一列,确定某行,然后在那行在做一
次BS.
http://stackoverflow.com/questions/2457792/given-a-2d-array-sor
的解法,本版过去有讨论过。

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

S******t
发帖数: 151
19
Java不懂,第一题就不讨论了
第二题我看了很久都不明白这和1D的binary search有任何区别
任意一个sorted array不都可以排成这样一个2d matrix么
没有任何附加信息啊,还是O(logM + logN)啊。。。

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

w****x
发帖数: 2483
20

你面试时候写的是binary search的code? 那得花多长时间啊

【在 p*****2 的大作中提到】
:
: 这个比较靠谱。不然没什么好考察的。

相关主题
来发个我的Leetcode的Python答案吧在整数数组中加运算符号和括号,求max
发一个Startup的面经 - Affirm关于Leetcode
贴几道老题目准备转回Java了
进入JobHunting版参与讨论
a*******o
发帖数: 67
21
弱问一下L家是哪家?

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

p*****2
发帖数: 21240
22

好像code不长呀。不过那时候我太弱了,只是有个概念,code里有bug,但是还给我过
了。

【在 w****x 的大作中提到】
:
: 你面试时候写的是binary search的code? 那得花多长时间啊

m***n
发帖数: 2154
23
在stackoverflow上看到一个算法。。不知道对不对
bool numberSearch(int[][] arr, int value, int minX, int maxX, int minY, int
maxY)
if (minX == maxX and minY == maxY and arr[minX,minY] != value)
return false
if (arr[minX,minY] > value) return false; // Early exits if the value can't
be in
if (arr[maxX,maxY] < value) return false; // this subrange at all.
int nextX = (minX + maxX) / 2
int nextY = (minY + maxY) / 2
if (arr[nextX,nextY] == value)
{
print nextX,nextY
return true
}
else if (arr[nextX,nextY] < value)
{
if (numberSearch(arr, value, minX, maxX, nextY + 1, maxY))
return true
return numberSearch(arr, value, nextX + 1, maxX, minY, nextY)
}
else
{
if (numberSearch(arr, value, minX, nextX - 1, minY, maxY))
return true
reutrn numberSearch(arr, value, nextX, maxX, minY, nextY)
}
s*********d
发帖数: 2406
24
我自己做出来了,主要是边界条件的问题。
public boolean bsearch2(int[][] p, int val, int xlo, int xhi, int ylo,
int yhi) {
if (xlo == xhi && ylo == yhi && (p[xlo][ylo] != val))
return false;
if (p[xlo][ylo] > val)
return false;
if (p[xhi][yhi] < val)
return false;// end conditon
int midi = (xlo + xhi) / 2;
int midj = (ylo + yhi) / 2;
//binary search
if (p[midi][midj] == val) {
System.out.println(midi);
System.out.println(midj);
return true;
} else if (p[midi][midj] < val) {
if (bsearch2(p, val, midi, midi, midj + 1, yhi)) {
return true;
} else
return bsearch2(p, val, midi + 1, xhi, ylo, yhi);
} else if (p[midi][midj] > val) {
if (bsearch2(p, val, midi, midi, ylo, midj-1)) {
return true;
} else
return bsearch2(p, val, xlo, midi - 1, ylo, yhi);
}
return false;
}
i**********e
发帖数: 1145
25
写了非递归的版本:
const int MAX_ROW = 512;
const int MAX_COL = 512;
int searchRow(int A[][MAX_COL], int m, int target) {
int L = 0, R = m-1;
while (L < R) {
int M = (L+R+1)/2;
if (target < A[M][0]) {
R = M-1;
} else {
L = M;
}
}
return (A[L][0] <= target) ? L : -1;
}
int searchCol(int A[][MAX_COL], int row, int n, int target) {
int L = 0, R = n-1;
while (L < R) {
int M = (L+R+1)/2;
if (target < A[row][M]) {
R = M-1;
} else {
L = M;
}
}
return (A[row][L] == target) ? L : -1;
}
bool search(int A[][MAX_COL], int m, int n, int target) {
int row = searchRow(A, m, target);
if (row == -1) return false;
int col = searchCol(A, row, n, target);
if (col == -1) return false;
return true;
}
w****x
发帖数: 2483
26

这个不对吧, 怎么一横一竖跑两遍就完了呢?? 我贴一个超长版的:
int _inner_search_row(int A[M][N], int nIterRow, int nIterCol, int nTg);
int _inner_search_col(int A[M][N], int nIterRow, int nIterCol, int nTg);
bool FindTarget2(int A[M][N], int nTg)
{
int nIterRow = 0;
int nIterCol = N-1;
while (nIterCol >= 0 && nIterRow < M && A[nIterRow][nIterCol] != nTg)
{
nIterRow = _inner_search_row(A, nIterRow, nIterCol, nTg);
nIterCol = _inner_search_col(A, nIterRow, nIterCol, nTg);
}
return nIterRow >= 0 && nIterRow < M;
}
int _inner_search_col(int A[M][N], int nIterRow, int nIterCol, int nTg)
{
if (nIterCol < 0 && nIterRow >= M)
return nIterCol;
int nBeg = 0;
int nEnd = nIterCol;
while (nBeg <= nEnd)
{
int nMid = (nBeg + nEnd)/2;
if (A[nIterRow][nMid] == nTg || (A[nIterRow][nMid] < nTg
&& (nMid == nIterCol || A[nIterRow][nMid+1] >= nTg)))
return nMid;
else if (A[nIterRow][nMid] < nTg)
nBeg = nMid + 1;
else nBeg = nMid - 1;
}
return -1;
}
int _inner_search_row(int A[M][N], int nIterRow, int nIterCol, int nTg)
{
if (nIterCol < 0 && nIterRow >= M)
return nIterRow;
int nBeg = nIterRow;
int nEnd = M-1;
while (nBeg <= nEnd)
{
int nMid = (nBeg + nEnd)/2;
if (A[nMid][nIterCol] == nTg || (A[nMid][nIterCol] > nTg
&& (nMid == 0 || A[nMid-1][nIterCol] <= nTg)))
return nMid;
else if (A[nMid][nIterCol] < nTg)
nBeg = nMid + 1;
else nBeg = nMid - 1;
}
return -1;
}

【在 i**********e 的大作中提到】
: 写了非递归的版本:
: const int MAX_ROW = 512;
: const int MAX_COL = 512;
: int searchRow(int A[][MAX_COL], int m, int target) {
: int L = 0, R = m-1;
: while (L < R) {
: int M = (L+R+1)/2;
: if (target < A[M][0]) {
: R = M-1;
: } else {

q***y
发帖数: 236
27
弱问,第二题最优解不是Young tableau http://en.wikipedia.org/wiki/Young_tableau linear search吗,从左下角开始,复杂度 O(m+n)?

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

l*****a
发帖数: 14598
28
binary search一遍结束,你这个recursion cost有点大

int
't

【在 m***n 的大作中提到】
: 在stackoverflow上看到一个算法。。不知道对不对
: bool numberSearch(int[][] arr, int value, int minX, int maxX, int minY, int
: maxY)
: if (minX == maxX and minY == maxY and arr[minX,minY] != value)
: return false
: if (arr[minX,minY] > value) return false; // Early exits if the value can't
: be in
: if (arr[maxX,maxY] < value) return false; // this subrange at all.
: int nextX = (minX + maxX) / 2
: int nextY = (minY + maxY) / 2

l*****a
发帖数: 14598
29
第一题到底考什么?
为什么不是
return Num1*Num2;
如果说溢出的话,那个Add就不溢出了?
请牛人指点!!!

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

l*****a
发帖数: 14598
30
根据题意,实际上可以看成一个有序一维数组。一遍binary search will work
bool contains(int a[][],int index,int target)
{
int y=index%n;
int x=index/n;
return target==a[x][y];
}
bool Search(int a[][],int m,int n,int target)
{
int lo=0;
int hi=m*n-1;
int x,y;
while(lo {
int mid=lo+(hi-lo)>>1;
if(contains(a,mid,target) return true;
if(target else lo=mid;
}
if(contains(a,hi,target) return true;
if(contains(a,lo,target) return true;
return false;
}
相关主题
电面题一个一道要求常数空间和O(n)时间的排序题
说好得FG面经,回馈板上GGJJ大牛给个大数(+-*)的面试解答吧
贡献一道面试题目:找出在一个数组里面只出现1次的两个数字上一道我以前喜欢出的题目吧
进入JobHunting版参与讨论
p*****2
发帖数: 21240
31

chengdu说的,考察的是binary search。

【在 l*****a 的大作中提到】
: 第一题到底考什么?
: 为什么不是
: return Num1*Num2;
: 如果说溢出的话,那个Add就不溢出了?
: 请牛人指点!!!

i**********e
发帖数: 1145
32
对所有行第一列进行 binary search,然后对那一行的所有列进行第二次的 binary
search.
先找出最大的一行的第一个值满足 <= target 条件,然后要找的target必定在那一行
的其中一列。如果不在的话,那就代表matrix没有那个值。

【在 w****x 的大作中提到】
:
: 这个不对吧, 怎么一横一竖跑两遍就完了呢?? 我贴一个超长版的:
: int _inner_search_row(int A[M][N], int nIterRow, int nIterCol, int nTg);
: int _inner_search_col(int A[M][N], int nIterRow, int nIterCol, int nTg);
: bool FindTarget2(int A[M][N], int nTg)
: {
: int nIterRow = 0;
: int nIterCol = N-1;
: while (nIterCol >= 0 && nIterRow < M && A[nIterRow][nIterCol] != nTg)
: {

i**********e
发帖数: 1145
33
不是。
读清楚题意,这个是每一列的第一个值大于之前一行的最后一个值。
Young tableau 是某一列的值不小于之前一行同一列的值。

【在 q***y 的大作中提到】
: 弱问,第二题最优解不是Young tableau http://en.wikipedia.org/wiki/Young_tableau linear search吗,从左下角开始,复杂度 O(m+n)?
l*********8
发帖数: 4642
34
没人回,我回一下吧:)
LinkedIn

【在 a*******o 的大作中提到】
: 弱问一下L家是哪家?
w****x
发帖数: 2483
35

是吗? 我一直认为是不断的search, 下面这个matrix找左下角的7:
1 2 3 4
3 5 8 9
6 6 8 10
7 15 18 20
我的方法是 4->9 9->5 5->15, 15->7
你怎么一行一列找出来??

【在 i**********e 的大作中提到】
: 对所有行第一列进行 binary search,然后对那一行的所有列进行第二次的 binary
: search.
: 先找出最大的一行的第一个值满足 <= target 条件,然后要找的target必定在那一行
: 的其中一列。如果不在的话,那就代表matrix没有那个值。

p*****2
发帖数: 21240
36

你这个例子不是这道题的吧?

【在 w****x 的大作中提到】
:
: 是吗? 我一直认为是不断的search, 下面这个matrix找左下角的7:
: 1 2 3 4
: 3 5 8 9
: 6 6 8 10
: 7 15 18 20
: 我的方法是 4->9 9->5 5->15, 15->7
: 你怎么一行一列找出来??

y*******g
发帖数: 6599
37
我已经说过了,第一题没什么考点。。
http://www.mitbbs.com/article0/JobHunting/32088049_0.html

【在 l*****a 的大作中提到】
: 第一题到底考什么?
: 为什么不是
: return Num1*Num2;
: 如果说溢出的话,那个Add就不溢出了?
: 请牛人指点!!!

w****x
发帖数: 2483
38

晕, 还以为是杨氏矩阵, 不好意思哈哈

【在 p*****2 的大作中提到】
:
: 你这个例子不是这道题的吧?

d******a
发帖数: 238
39
写个简单的啊,O(lgn)时间,O(1)空间。
const int ROW = 100;
const int COLUMN = 50;
int get_value(int a[][COLUMN], int m, int n, int pos)
{
int row_pos = pos / n;
int col_pos = pos % n;

return a[row_pos][col_pos];
}

bool binary_search(int a[][COLUMN], int m, int n, int target)
{
int middle;
int start = 0;
int end = m * n - 1;
int middle_value;

while(start <= end)
{
middle = start + (end - start) / 2;
middle_value = get_value(a, m, n, middle);
if( target == middle_value)
return true;
else if(target < middle_value)
{
end = middle - 1;
}
else
{
start = middle + 1;
}
}

return false;
}
X*K
发帖数: 87
40
第一题如果不考虑溢出的话似乎也就是加一个可有可无的@Override了:
public class aaClass extends absClass {
@Override
public int MultiplyTwoNumbers(int Num1, int Num2) {
int multiplyresult = 0 ;
multiplyresult=Num1*Num2;

return multiplyresult;
}

【在 s*********d 的大作中提到】
: 没什么好说的,还是自己不行。
: 第一题
: abstract class absClass
: {
: public int AddTwoNumbers(int Num1, int Num2)
: {
: return Num1 + Num2;
: }
: public abstract int MultiplyTwoNumbers(int Num1, int Num2);
: }

相关主题
上一道我以前喜欢出的题目吧问一道前几天在版上看见的题
G一道题大整数相乘谁贴个bug free的code
F面经今天竟然把MULTIPLY(大数相乘)写完了,发帖庆祝
进入JobHunting版参与讨论
l*****a
发帖数: 14598
41
why not
return Num1*Num2?

【在 X*K 的大作中提到】
: 第一题如果不考虑溢出的话似乎也就是加一个可有可无的@Override了:
: public class aaClass extends absClass {
: @Override
: public int MultiplyTwoNumbers(int Num1, int Num2) {
: int multiplyresult = 0 ;
: multiplyresult=Num1*Num2;
:
: return multiplyresult;
: }

w***y
发帖数: 6251
42
第一题什么意思? 完全不明白在问什么。。。。。。。。。。 5555555555
第二题,就是mid =(low+high)/2, 从low = 0, high =m*n-1开始做binary search吧?
每次用/ %把 mid转化为矩阵里面的行、列值
1 (共1页)
进入JobHunting版参与讨论
相关主题
关于LeetcodeG一道题
准备转回Java了F面经
电面题一个问一道前几天在版上看见的题
说好得FG面经,回馈板上GGJJ大整数相乘谁贴个bug free的code
贡献一道面试题目:找出在一个数组里面只出现1次的两个数字今天竟然把MULTIPLY(大数相乘)写完了,发帖庆祝
一道要求常数空间和O(n)时间的排序题这道题怎么解
大牛给个大数(+-*)的面试解答吧如何求一个整数阶乘的各位数字和
上一道我以前喜欢出的题目吧来发个我的Leetcode的Python答案吧
相关话题的讨论汇总
话题: int话题: return话题: niterrow话题: nitercol话题: nmid