Redian新闻
>
AMAZON PHONE SCREEN 1 基本死掉。
avatar
AMAZON PHONE SCREEN 1 基本死掉。# JobHunting - 待字闺中
e*s
1
没求BLESS是不是就比较悲剧呢?
1.说一下Hash function的技术要点
2.说一下Hashtable
3.100 Million 个 10 bit integer,怎么sort快?
4.螺旋打印2维数组
e.c. 1,2,3
4,5,6
7,8,9
output: 1,2,3,6,9,8,7,4,5
avatar
y*n
2
pat pat, 第2轮可以补救的。
加油
avatar
s*n
3
螺旋打印有点意思
avatar
s*n
4
估计做得不错,能答4道题,弱的两题就没时间了

【在 y*****n 的大作中提到】
: pat pat, 第2轮可以补救的。
: 加油

avatar
A*u
5
AMZ太无聊了,
每人都问hash table

【在 e***s 的大作中提到】
: 没求BLESS是不是就比较悲剧呢?
: 1.说一下Hash function的技术要点
: 2.说一下Hashtable
: 3.100 Million 个 10 bit integer,怎么sort快?
: 4.螺旋打印2维数组
: e.c. 1,2,3
: 4,5,6
: 7,8,9
: output: 1,2,3,6,9,8,7,4,5

avatar
A*u
6
只有螺旋打印要写代码吧
其它的瞎blabla,说说思路

【在 s******n 的大作中提到】
: 估计做得不错,能答4道题,弱的两题就没时间了
avatar
s*n
7
还挺复杂,你来写一个吧。

【在 A**u 的大作中提到】
: 只有螺旋打印要写代码吧
: 其它的瞎blabla,说说思路

avatar
s*n
8
螺旋打印:
int array[N][N];
for (int i=0; ifor (int j=i; jfor (int j=i; jfor (int j=N-i-1; j>0; --j) cout<for (int j=N-i-1; j>0; --j) cout<}
avatar
f*2
9
求问第3题怎么回答最好?是不是用bucket sort?
avatar
y*n
10
没有说是N*N的吧。而且如果N是奇数的话是不是中间那个数打不出来? 每个角落的数
是不是会打2次?

【在 s******n 的大作中提到】
: 螺旋打印:
: int array[N][N];
: for (int i=0; i: for (int j=i; j: for (int j=i; j: for (int j=N-i-1; j>0; --j) cout<: for (int j=N-i-1; j>0; --j) cout<: }

avatar
y*n
11
public static void printMatrixCircle(int[][] matrix) {
// there is more row here
int startRow = 0;
int startColumn = 0;
int endRow = matrix.length - 1;
int endColumn = matrix[0].length - 1;
while (startRow <= endRow && startColumn <= endColumn) {
helpPrintMatrixCircle(matrix, startRow, startColumn, endRow, endColumn);
startRow++;
endRow--;
startColumn++;
endColumn--;
}
}
public static void helpPrintMatrixCircle(int[][] matrix, int startRow,
int startColumn,
int endRow, int endColumn) {
// special case only one row
if (startRow == endRow) {
for (int i = startColumn; i <= endColumn; i++) {
System.out.print(matrix[startRow][i] + " ");
}
return;
}
// special case only one column
if (startColumn == endColumn) {
for (int i = startRow; i <= endRow; i++) {
System.out.print(matrix[i][startColumn] + " ");
}
return;
}
// print first row
for (int i = startColumn; i <= endColumn; i++) {
System.out.println(matrix[startRow][i]);
}
// print column at right side
for (int i = startRow + 1; i <= endRow; i++) {
System.out.println(matrix[i][endColumn] + " ");
}
// print second row
for (int i = endColumn - 1; i >= startColumn; i--) {
System.out.println(matrix[endRow][i] + " ");
}
// print column at left
for (int i = endRow - 1; i >= startRow + 1; i--) {
System.out.println(matrix[i][startColumn] + " ");
}
}
avatar
C*U
12
什么叫hash function的技术要点?
啥意思?

【在 e***s 的大作中提到】
: 没求BLESS是不是就比较悲剧呢?
: 1.说一下Hash function的技术要点
: 2.说一下Hashtable
: 3.100 Million 个 10 bit integer,怎么sort快?
: 4.螺旋打印2维数组
: e.c. 1,2,3
: 4,5,6
: 7,8,9
: output: 1,2,3,6,9,8,7,4,5

avatar
y*n
13
第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
用个1024的数组然后记录对应的index出现的次数就好了把。
avatar
P*U
14
import java.util.*;
public class CirclePrint {
public static void main(String[] args){
int N = 4, M = 4;
int cnt = N*M;
int[][] matrix = new int[N][M];
boolean[][] visited = new boolean[N][M];

int val = 1;
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
matrix[i][j] = val;
visited[i][j] = false;
val++;
}
}

int i = 0, j = 0;
visited[i][j] = true;
System.out.print(matrix[i][j]);
cnt--;

while(true){

j++;
while(j < M && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
j++;
}
j--;

i++;
while(i < N && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
i++;
}
i--;

j--;
while(j >= 0 && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
j--;
}
j++;

i--;
while(i >= 0 && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
i--;
}
i++;

if(cnt==0)
break;
}

}
}
avatar
c*9
15
嗯,Radix sort最快吧

【在 f**********2 的大作中提到】
: 求问第3题怎么回答最好?是不是用bucket sort?
avatar
P*U
16
第三题就是标准的bucket sort吧,O(n)的时间
avatar
h*w
17
radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了

【在 c****9 的大作中提到】
: 嗯,Radix sort最快吧
avatar
f*2
18
还可能有负数吧,1024不够

【在 y*****n 的大作中提到】
: 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
: 用个1024的数组然后记录对应的index出现的次数就好了把。

avatar
f*2
19
同意

就好了

【在 h********w 的大作中提到】
: radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了
avatar
f*2
20
正解

【在 P*******U 的大作中提到】
: import java.util.*;
: public class CirclePrint {
: public static void main(String[] args){
: int N = 4, M = 4;
: int cnt = N*M;
: int[][] matrix = new int[N][M];
: boolean[][] visited = new boolean[N][M];
:
: int val = 1;
: for(int i = 0; i < N; i++){

avatar
y*n
21
10个digit不最多能有1024个数么= =我记错了?
有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后
round到0然后再走到n-1不就好了。

【在 f**********2 的大作中提到】
: 还可能有负数吧,1024不够
avatar
c*2
22
这个办法不错啊

【在 y*****n 的大作中提到】
: 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
: 用个1024的数组然后记录对应的index出现的次数就好了把。

avatar
e*s
23
贴一个我c#的解法吧,是后来写出来的,当场写的就是一坨屎~
public static void Print(int[,] arr)
{
int n = arr.GetUpperBound(0);
int m = arr.GetUpperBound(1);
if(n == -1 && m == -1)
return;
if (n == 0)
{
for (int i = 0; i <= m; i++)
Console.Write(arr[0, i] + " ");
return;
}
if (m == 0)
{
for (int i = 0; i <= n; i++)
Console.Write(arr[i, 0] + " ");
return;
}
int a = 0;
while (a <= Math.Min(n, m) / 2)
{
for (int i = a; i <= m - a; i++)
Console.Write(arr[a, i] + " ");
for (int i = a + 1; i <= n-a; i++)
Console.Write(arr[i, m - a] + " ");
for (int i = m - a - 1; i >= a; i--)
Console.Write(arr[n - a, i] + " ");
for (int i = n - a - 1; i >= a + 1; i--)
Console.Write(arr[i, a] + " ");
a++;
}
}
avatar
s*n
24
嗯,中间的漏了,但是角上不会打两次

【在 y*****n 的大作中提到】
: 没有说是N*N的吧。而且如果N是奇数的话是不是中间那个数打不出来? 每个角落的数
: 是不是会打2次?

avatar
f*l
25
it is counting sort, right?

【在 y*****n 的大作中提到】
: 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
: 用个1024的数组然后记录对应的index出现的次数就好了把。

avatar
f*l
26
why not just convert signed number to unsigned number?

【在 y*****n 的大作中提到】
: 10个digit不最多能有1024个数么= =我记错了?
: 有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后
: round到0然后再走到n-1不就好了。

avatar
f*l
27
the hash value should scatter evenly?

【在 C***U 的大作中提到】
: 什么叫hash function的技术要点?
: 啥意思?

avatar
b*u
28
4.螺旋打印2维数组
似乎应该用递归
avatar
y*n
30
= = that solution can easily be changed to an while loop. it always better
to use an loop than recursion, right?

【在 r*****b 的大作中提到】
: Yes, recursion should be the simplest solution for this.
: Here is a post on this:
: http://basicalgos.blogspot.com/2012/03/spiral-print-of-matrix.h

avatar
e*s
32
没求BLESS是不是就比较悲剧呢?
1.说一下Hash function的技术要点
2.说一下Hashtable
3.100 Million 个 10 bit integer,怎么sort快?
4.螺旋打印2维数组
e.c. 1,2,3
4,5,6
7,8,9
output: 1,2,3,6,9,8,7,4,5
avatar
y*n
33
pat pat, 第2轮可以补救的。
加油
avatar
s*n
34
螺旋打印有点意思
avatar
s*n
35
估计做得不错,能答4道题,弱的两题就没时间了

【在 y*****n 的大作中提到】
: pat pat, 第2轮可以补救的。
: 加油

avatar
A*u
36
AMZ太无聊了,
每人都问hash table

【在 e***s 的大作中提到】
: 没求BLESS是不是就比较悲剧呢?
: 1.说一下Hash function的技术要点
: 2.说一下Hashtable
: 3.100 Million 个 10 bit integer,怎么sort快?
: 4.螺旋打印2维数组
: e.c. 1,2,3
: 4,5,6
: 7,8,9
: output: 1,2,3,6,9,8,7,4,5

avatar
A*u
37
只有螺旋打印要写代码吧
其它的瞎blabla,说说思路

【在 s******n 的大作中提到】
: 估计做得不错,能答4道题,弱的两题就没时间了
avatar
s*n
38
还挺复杂,你来写一个吧。

【在 A**u 的大作中提到】
: 只有螺旋打印要写代码吧
: 其它的瞎blabla,说说思路

avatar
s*n
39
螺旋打印:
int array[N][N];
for (int i=0; ifor (int j=i; jfor (int j=i; jfor (int j=N-i-1; j>0; --j) cout<for (int j=N-i-1; j>0; --j) cout<}
avatar
f*2
40
求问第3题怎么回答最好?是不是用bucket sort?
avatar
y*n
41
没有说是N*N的吧。而且如果N是奇数的话是不是中间那个数打不出来? 每个角落的数
是不是会打2次?

【在 s******n 的大作中提到】
: 螺旋打印:
: int array[N][N];
: for (int i=0; i: for (int j=i; j: for (int j=i; j: for (int j=N-i-1; j>0; --j) cout<: for (int j=N-i-1; j>0; --j) cout<: }

avatar
y*n
42
public static void printMatrixCircle(int[][] matrix) {
// there is more row here
int startRow = 0;
int startColumn = 0;
int endRow = matrix.length - 1;
int endColumn = matrix[0].length - 1;
while (startRow <= endRow && startColumn <= endColumn) {
helpPrintMatrixCircle(matrix, startRow, startColumn, endRow, endColumn);
startRow++;
endRow--;
startColumn++;
endColumn--;
}
}
public static void helpPrintMatrixCircle(int[][] matrix, int startRow,
int startColumn,
int endRow, int endColumn) {
// special case only one row
if (startRow == endRow) {
for (int i = startColumn; i <= endColumn; i++) {
System.out.print(matrix[startRow][i] + " ");
}
return;
}
// special case only one column
if (startColumn == endColumn) {
for (int i = startRow; i <= endRow; i++) {
System.out.print(matrix[i][startColumn] + " ");
}
return;
}
// print first row
for (int i = startColumn; i <= endColumn; i++) {
System.out.println(matrix[startRow][i]);
}
// print column at right side
for (int i = startRow + 1; i <= endRow; i++) {
System.out.println(matrix[i][endColumn] + " ");
}
// print second row
for (int i = endColumn - 1; i >= startColumn; i--) {
System.out.println(matrix[endRow][i] + " ");
}
// print column at left
for (int i = endRow - 1; i >= startRow + 1; i--) {
System.out.println(matrix[i][startColumn] + " ");
}
}
avatar
C*U
43
什么叫hash function的技术要点?
啥意思?

【在 e***s 的大作中提到】
: 没求BLESS是不是就比较悲剧呢?
: 1.说一下Hash function的技术要点
: 2.说一下Hashtable
: 3.100 Million 个 10 bit integer,怎么sort快?
: 4.螺旋打印2维数组
: e.c. 1,2,3
: 4,5,6
: 7,8,9
: output: 1,2,3,6,9,8,7,4,5

avatar
y*n
44
第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
用个1024的数组然后记录对应的index出现的次数就好了把。
avatar
P*U
45
import java.util.*;
public class CirclePrint {
public static void main(String[] args){
int N = 4, M = 4;
int cnt = N*M;
int[][] matrix = new int[N][M];
boolean[][] visited = new boolean[N][M];

int val = 1;
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
matrix[i][j] = val;
visited[i][j] = false;
val++;
}
}

int i = 0, j = 0;
visited[i][j] = true;
System.out.print(matrix[i][j]);
cnt--;

while(true){

j++;
while(j < M && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
j++;
}
j--;

i++;
while(i < N && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
i++;
}
i--;

j--;
while(j >= 0 && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
j--;
}
j++;

i--;
while(i >= 0 && !visited[i][j]){
visited[i][j] = true;
System.out.print(","+matrix[i][j]);
cnt--;
i--;
}
i++;

if(cnt==0)
break;
}

}
}
avatar
c*9
46
嗯,Radix sort最快吧

【在 f**********2 的大作中提到】
: 求问第3题怎么回答最好?是不是用bucket sort?
avatar
P*U
47
第三题就是标准的bucket sort吧,O(n)的时间
avatar
h*w
48
radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了

【在 c****9 的大作中提到】
: 嗯,Radix sort最快吧
avatar
f*2
49
还可能有负数吧,1024不够

【在 y*****n 的大作中提到】
: 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
: 用个1024的数组然后记录对应的index出现的次数就好了把。

avatar
f*2
50
同意

就好了

【在 h********w 的大作中提到】
: radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了
avatar
f*2
51
正解

【在 P*******U 的大作中提到】
: import java.util.*;
: public class CirclePrint {
: public static void main(String[] args){
: int N = 4, M = 4;
: int cnt = N*M;
: int[][] matrix = new int[N][M];
: boolean[][] visited = new boolean[N][M];
:
: int val = 1;
: for(int i = 0; i < N; i++){

avatar
y*n
52
10个digit不最多能有1024个数么= =我记错了?
有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后
round到0然后再走到n-1不就好了。

【在 f**********2 的大作中提到】
: 还可能有负数吧,1024不够
avatar
c*2
53
这个办法不错啊

【在 y*****n 的大作中提到】
: 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
: 用个1024的数组然后记录对应的index出现的次数就好了把。

avatar
e*s
54
贴一个我c#的解法吧,是后来写出来的,当场写的就是一坨屎~
public static void Print(int[,] arr)
{
int n = arr.GetUpperBound(0);
int m = arr.GetUpperBound(1);
if(n == -1 && m == -1)
return;
if (n == 0)
{
for (int i = 0; i <= m; i++)
Console.Write(arr[0, i] + " ");
return;
}
if (m == 0)
{
for (int i = 0; i <= n; i++)
Console.Write(arr[i, 0] + " ");
return;
}
int a = 0;
while (a <= Math.Min(n, m) / 2)
{
for (int i = a; i <= m - a; i++)
Console.Write(arr[a, i] + " ");
for (int i = a + 1; i <= n-a; i++)
Console.Write(arr[i, m - a] + " ");
for (int i = m - a - 1; i >= a; i--)
Console.Write(arr[n - a, i] + " ");
for (int i = n - a - 1; i >= a + 1; i--)
Console.Write(arr[i, a] + " ");
a++;
}
}
avatar
s*n
55
嗯,中间的漏了,但是角上不会打两次

【在 y*****n 的大作中提到】
: 没有说是N*N的吧。而且如果N是奇数的话是不是中间那个数打不出来? 每个角落的数
: 是不是会打2次?

avatar
f*l
56
it is counting sort, right?

【在 y*****n 的大作中提到】
: 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
: 用个1024的数组然后记录对应的index出现的次数就好了把。

avatar
f*l
57
why not just convert signed number to unsigned number?

【在 y*****n 的大作中提到】
: 10个digit不最多能有1024个数么= =我记错了?
: 有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后
: round到0然后再走到n-1不就好了。

avatar
f*l
58
the hash value should scatter evenly?

【在 C***U 的大作中提到】
: 什么叫hash function的技术要点?
: 啥意思?

avatar
b*u
59
4.螺旋打印2维数组
似乎应该用递归
avatar
y*n
61
= = that solution can easily be changed to an while loop. it always better
to use an loop than recursion, right?

【在 r*****b 的大作中提到】
: Yes, recursion should be the simplest solution for this.
: Here is a post on this:
: http://basicalgos.blogspot.com/2012/03/spiral-print-of-matrix.h

avatar
m*l
63
10bit只能表示1024个数,所以不用考虑负数,就像32位integer表示的数是-2^31到2^
31-1,一共2^32个数

【在 f**********2 的大作中提到】
: 还可能有负数吧,1024不够
avatar
s*y
64
写了个C++版本的螺旋打印。。
void printCircular(int** data,int rows, int cols)
{
int minRow = 0;
int minCol = 0;
int maxRow = rows-1;
int maxCol = cols-1;
while(minRow <= maxRow && minCol <=maxCol)
{
for(int j = minCol; j <= maxCol; j++)
std::cout<minRow++;
for(int i = minRow; i <= maxRow; i++)
std::cout<maxCol--;
for(int j = maxCol; j >= minCol; j--)
std::cout<maxRow--;
for(int i = maxRow; i>=minRow; i--)
std::cout<minCol++;
}
}
avatar
a*9
65
public class Circle_Print {
public static void print(int[][] A){
int m = A[0].length;
int n = A.length - 1;
int i = 0;
int j = 0;
boolean forwardDownward = true;
while(true){
if(m == 0) break;
else{
for (int p = 0; p < m-1; p++) {
System.out.print(A[i][j]+",");
if(forwardDownward) j++;
else j--;
}
System.out.print(A[i][j]+",");
m--;
}

if(n==0) break;
else{
if(forwardDownward) i++;
else i--;
for (int q = 0; q < n-1; q++) {
System.out.print(A[i][j]+",");
if(forwardDownward) i++;
else i--;
}

System.out.print(A[i][j]+",");
n--;
forwardDownward = !forwardDownward;
if(forwardDownward) j++;
else j--;
}
}
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。