由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 电面题一个
相关主题
怎么O(1)时间判断N阶#字棋的获胜格局?这题就够凶残的了吧
问个面试题g 家面经
AMAZON PHONE SCREEN 1 基本死掉。一道G题
顺时针打印MxN矩阵的简洁递归解法L家phone面,悲剧
matrix question请教leetcode N-Queens II问题
新鲜onsite面经Leetcode Surrounded Regions Large Case Runtime Error
拿到offer,分享之前的一些onsite面试哪位大牛能给这题的正确答案吗?
leetcode wordsearch的时间复杂度?Tic Tac Toe 检查是否获胜的最优解是啥?
相关话题的讨论汇总
话题: int话题: row话题: col话题: matrix话题: diag
进入JobHunting版参与讨论
1 (共1页)
v***o
发帖数: 287
1
Given a 2D matrix, print all elements of the given matrix in diagonal order.
For example, consider the following 5 X 4 input matrix.
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
Diagonal printing of the above matrix is
1
5 2
9 6 3
13 10 7 4
17 14 11 8
18 15 12
19 16
20
t*******y
发帖数: 22
2
void printDiagonal(const vector>& m){
assert(!m.empty() && !m[0].empty());
int rows = m.size();
int cols = m[0].size();
for(int i=0; i int j=i;
for(int k=0; j>=0 && k < cols;++k,--j){
cout << m[j][k] << " ";
}
cout << endl;
}
}
h*******e
发帖数: 1377
3
楼上你的逻辑在 i >= rows时候也对么

【在 t*******y 的大作中提到】
: void printDiagonal(const vector>& m){
: assert(!m.empty() && !m[0].empty());
: int rows = m.size();
: int cols = m[0].size();
: for(int i=0; i: int j=i;
: for(int k=0; j>=0 && k < cols;++k,--j){
: cout << m[j][k] << " ";
: }
: cout << endl;

h****g
发帖数: 105
4
int m=matrix.size();
int n=matrix[0].size();
int i=0;
while(i int j=0;
int a=i;
do{
cout< } while(a>=0&&j i++;
cout< }
int j=1;
while(j int i=m-1;
int b=j;
do{
cout< } while(i>=0&&b j++;
cout< }
t*******y
发帖数: 22
5
有bug,对最后一行特殊处理。

【在 h*******e 的大作中提到】
: 楼上你的逻辑在 i >= rows时候也对么
h*******e
发帖数: 1377
6
恩,就是k 和 j 的初值在最后一行第2个到最后的时候处理一下就好了,其他的写
得都还挺好。

【在 t*******y 的大作中提到】
: 有bug,对最后一行特殊处理。
t*******y
发帖数: 22
7
谢谢大牛夸奖

【在 h*******e 的大作中提到】
: 恩,就是k 和 j 的初值在最后一行第2个到最后的时候处理一下就好了,其他的写
: 得都还挺好。

h*******e
发帖数: 1377
8
哪有,我不是大牛哈。呵呵,大家一起互相学习, 一起讨论 一起提高么。

【在 t*******y 的大作中提到】
: 谢谢大牛夸奖
x*******e
发帖数: 84
9
g家的
v***o
发帖数: 287
10
void diagonalOrder(int matrix[ROW][COL])
{
// There will be ROW+COL-1 lines in the output
for (int line=1; line<=(ROW + COL -1); line++)
{
/* Get column index of the first element in this line of output.
The index is 0 for first ROW lines and line - ROW for remaining
lines */
int start_col = max(0, line-ROW);
/* Get count of elements in this line. The count of elements is
equal to minimum of line number, COL-start_col and ROW */
int count = min(line, (COL-start_col), ROW);
/* Print elements of this line */
for (int j=0; j printf("%5d ", matrix[min(ROW, line)-j-1][start_col+j]);
/* Ptint elements of next diagonal on next line */
printf("n");
}
}

order.

【在 v***o 的大作中提到】
: Given a 2D matrix, print all elements of the given matrix in diagonal order.
: For example, consider the following 5 X 4 input matrix.
: 1 2 3 4
: 5 6 7 8
: 9 10 11 12
: 13 14 15 16
: 17 18 19 20
: Diagonal printing of the above matrix is
: 1
: 5 2

相关主题
新鲜onsite面经这题就够凶残的了吧
拿到offer,分享之前的一些onsite面试g 家面经
leetcode wordsearch的时间复杂度?一道G题
进入JobHunting版参与讨论
a******0
发帖数: 67
11
厉害,能不能讲讲您是怎么想到这个的,:-)
int count = min(line, (COL-start_col), ROW);
thanks

【在 v***o 的大作中提到】
: void diagonalOrder(int matrix[ROW][COL])
: {
: // There will be ROW+COL-1 lines in the output
: for (int line=1; line<=(ROW + COL -1); line++)
: {
: /* Get column index of the first element in this line of output.
: The index is 0 for first ROW lines and line - ROW for remaining
: lines */
: int start_col = max(0, line-ROW);
: /* Get count of elements in this line. The count of elements is

w******e
发帖数: 1621
12
6x4的input应该排成啥样
1
2
3
4
4
4
3
2
1

7*4的input呢
c*******r
发帖数: 610
w**********h
发帖数: 31
14
public static void diagonalMatrix(int[][] M){
int row=M.length; int col=M[0].length;
int diag_row=row+col-1;//# rows for the new diagonal matrix
int diag_col=Math.min(col,row);
int new_row=0,new_i=0,new_j=0;
for(int i=0;i for (int j=0;j<=diag_col;j++){
new_row=row-j;//
new_i=i-j;new_j=j;
if(new_i<0){System.out.printf("\n");break;}
if(new_i>new_row-1) {new_i=new_row-1;new_j=i-new_i;}
if(new_j>col-1||new_i<0){System.out.printf("\n");break;}
System.out.printf(String.valueOf(M[new_i][new_j])+" ");
}
}
a*****e
发帖数: 1700
15
这是一个很简洁的递归问题,为什么没有人给出这方面的解答?diag(X) 可以分解成:
diag(X) = combine(leftColumnOf(X), diag(RightColumnsOf(X)))
以下是用 Haskell 写的答案:
diag [] = []
diag ([]:xs) = [] : diag xs
diag a = [x] : comb l (diag r)
where
x:l = map head a
r = map tail a
comb [] s = s
comb x [] = [x]
comb (x:y) (s:r) = (x:s) : comb y r
m****s
发帖数: 131
16
void printDigMatrix(int **m, int r, int c){
for(int i=0; i int j;
if(i>=r){
j = i-r+1;
}
else j=0;
while(j<=i&&j printf("%d ", m[i-j][j]);
j++;
}
printf("\n");
}
}
v***o
发帖数: 287
17
Given a 2D matrix, print all elements of the given matrix in diagonal order.
For example, consider the following 5 X 4 input matrix.
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
Diagonal printing of the above matrix is
1
5 2
9 6 3
13 10 7 4
17 14 11 8
18 15 12
19 16
20
t*******y
发帖数: 22
18
void printDiagonal(const vector>& m){
assert(!m.empty() && !m[0].empty());
int rows = m.size();
int cols = m[0].size();
for(int i=0; i int j=i;
for(int k=0; j>=0 && k < cols;++k,--j){
cout << m[j][k] << " ";
}
cout << endl;
}
}
h*******e
发帖数: 1377
19
楼上你的逻辑在 i >= rows时候也对么

【在 t*******y 的大作中提到】
: void printDiagonal(const vector>& m){
: assert(!m.empty() && !m[0].empty());
: int rows = m.size();
: int cols = m[0].size();
: for(int i=0; i: int j=i;
: for(int k=0; j>=0 && k < cols;++k,--j){
: cout << m[j][k] << " ";
: }
: cout << endl;

h****g
发帖数: 105
20
int m=matrix.size();
int n=matrix[0].size();
int i=0;
while(i int j=0;
int a=i;
do{
cout< } while(a>=0&&j i++;
cout< }
int j=1;
while(j int i=m-1;
int b=j;
do{
cout< } while(i>=0&&b j++;
cout< }
相关主题
L家phone面,悲剧哪位大牛能给这题的正确答案吗?
请教leetcode N-Queens II问题Tic Tac Toe 检查是否获胜的最优解是啥?
Leetcode Surrounded Regions Large Case Runtime ErrorOracle offer
进入JobHunting版参与讨论
t*******y
发帖数: 22
21
有bug,对最后一行特殊处理。

【在 h*******e 的大作中提到】
: 楼上你的逻辑在 i >= rows时候也对么
h*******e
发帖数: 1377
22
恩,就是k 和 j 的初值在最后一行第2个到最后的时候处理一下就好了,其他的写
得都还挺好。

【在 t*******y 的大作中提到】
: 有bug,对最后一行特殊处理。
t*******y
发帖数: 22
23
谢谢大牛夸奖

【在 h*******e 的大作中提到】
: 恩,就是k 和 j 的初值在最后一行第2个到最后的时候处理一下就好了,其他的写
: 得都还挺好。

h*******e
发帖数: 1377
24
哪有,我不是大牛哈。呵呵,大家一起互相学习, 一起讨论 一起提高么。

【在 t*******y 的大作中提到】
: 谢谢大牛夸奖
x*******e
发帖数: 84
25
g家的
v***o
发帖数: 287
26
void diagonalOrder(int matrix[ROW][COL])
{
// There will be ROW+COL-1 lines in the output
for (int line=1; line<=(ROW + COL -1); line++)
{
/* Get column index of the first element in this line of output.
The index is 0 for first ROW lines and line - ROW for remaining
lines */
int start_col = max(0, line-ROW);
/* Get count of elements in this line. The count of elements is
equal to minimum of line number, COL-start_col and ROW */
int count = min(line, (COL-start_col), ROW);
/* Print elements of this line */
for (int j=0; j printf("%5d ", matrix[min(ROW, line)-j-1][start_col+j]);
/* Ptint elements of next diagonal on next line */
printf("n");
}
}

order.

【在 v***o 的大作中提到】
: Given a 2D matrix, print all elements of the given matrix in diagonal order.
: For example, consider the following 5 X 4 input matrix.
: 1 2 3 4
: 5 6 7 8
: 9 10 11 12
: 13 14 15 16
: 17 18 19 20
: Diagonal printing of the above matrix is
: 1
: 5 2

a******0
发帖数: 67
27
厉害,能不能讲讲您是怎么想到这个的,:-)
int count = min(line, (COL-start_col), ROW);
thanks

【在 v***o 的大作中提到】
: void diagonalOrder(int matrix[ROW][COL])
: {
: // There will be ROW+COL-1 lines in the output
: for (int line=1; line<=(ROW + COL -1); line++)
: {
: /* Get column index of the first element in this line of output.
: The index is 0 for first ROW lines and line - ROW for remaining
: lines */
: int start_col = max(0, line-ROW);
: /* Get count of elements in this line. The count of elements is

w******e
发帖数: 1621
28
6x4的input应该排成啥样
1
2
3
4
4
4
3
2
1

7*4的input呢
c*******r
发帖数: 610
w**********h
发帖数: 31
30
public static void diagonalMatrix(int[][] M){
int row=M.length; int col=M[0].length;
int diag_row=row+col-1;//# rows for the new diagonal matrix
int diag_col=Math.min(col,row);
int new_row=0,new_i=0,new_j=0;
for(int i=0;i for (int j=0;j<=diag_col;j++){
new_row=row-j;//
new_i=i-j;new_j=j;
if(new_i<0){System.out.printf("\n");break;}
if(new_i>new_row-1) {new_i=new_row-1;new_j=i-new_i;}
if(new_j>col-1||new_i<0){System.out.printf("\n");break;}
System.out.printf(String.valueOf(M[new_i][new_j])+" ");
}
}
相关主题
请教一道onsite面试题问个面试题
问两个offer nvidia和aristaAMAZON PHONE SCREEN 1 基本死掉。
怎么O(1)时间判断N阶#字棋的获胜格局?顺时针打印MxN矩阵的简洁递归解法
进入JobHunting版参与讨论
a*****e
发帖数: 1700
31
这是一个很简洁的递归问题,为什么没有人给出这方面的解答?diag(X) 可以分解成:
diag(X) = combine(leftColumnOf(X), diag(RightColumnsOf(X)))
以下是用 Haskell 写的答案:
diag [] = []
diag ([]:xs) = [] : diag xs
diag a = [x] : comb l (diag r)
where
x:l = map head a
r = map tail a
comb [] s = s
comb x [] = [x]
comb (x:y) (s:r) = (x:s) : comb y r
m****s
发帖数: 131
32
void printDigMatrix(int **m, int r, int c){
for(int i=0; i int j;
if(i>=r){
j = i-r+1;
}
else j=0;
while(j<=i&&j printf("%d ", m[i-j][j]);
j++;
}
printf("\n");
}
}
f**********t
发帖数: 1001
33
for (int i = 0; i < row + col - 1; ++i) {
for (int x = min(i, row - 1), y = max(0, i - row + 1); 0 <= x && y -x, ++y) {
cout << matrix[x][y] << 't';
}
cout << endl;
}

order.

【在 v***o 的大作中提到】
: Given a 2D matrix, print all elements of the given matrix in diagonal order.
: For example, consider the following 5 X 4 input matrix.
: 1 2 3 4
: 5 6 7 8
: 9 10 11 12
: 13 14 15 16
: 17 18 19 20
: Diagonal printing of the above matrix is
: 1
: 5 2

z*********e
发帖数: 10149
34
int row = A.length;
if(row == 0) return;
int col = A[0].length;
for(int i = 0; i <= row + col - 2; i++){
for(int j = 0; j <= i; j++) {
if (i - j < row && j < col) System.out.print(A[i - j][j] + "
");
}
if( i != row + col - 2) System.out.println();
}
w*****t
发帖数: 485
35
G电面还有个变体,要更复杂一些,输出成这个样子:
1 5 2 3 6 9 13 10 7 4 8 11 14 17 18 15 12 16 19 20
就是说每次的起点并不是在左侧或底部,而是一个连续的zigzag。
1 (共1页)
进入JobHunting版参与讨论
相关主题
Tic Tac Toe 检查是否获胜的最优解是啥?matrix question
Oracle offer新鲜onsite面经
请教一道onsite面试题拿到offer,分享之前的一些onsite面试
问两个offer nvidia和aristaleetcode wordsearch的时间复杂度?
怎么O(1)时间判断N阶#字棋的获胜格局?这题就够凶残的了吧
问个面试题g 家面经
AMAZON PHONE SCREEN 1 基本死掉。一道G题
顺时针打印MxN矩阵的简洁递归解法L家phone面,悲剧
相关话题的讨论汇总
话题: int话题: row话题: col话题: matrix话题: diag