e***s 发帖数: 799 | 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 |
y*****n 发帖数: 243 | |
s******n 发帖数: 3946 | |
s******n 发帖数: 3946 | 4 估计做得不错,能答4道题,弱的两题就没时间了
【在 y*****n 的大作中提到】 : pat pat, 第2轮可以补救的。 : 加油
|
A**u 发帖数: 2458 | 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
|
A**u 发帖数: 2458 | 6 只有螺旋打印要写代码吧
其它的瞎blabla,说说思路
【在 s******n 的大作中提到】 : 估计做得不错,能答4道题,弱的两题就没时间了
|
s******n 发帖数: 3946 | 7 还挺复杂,你来写一个吧。
【在 A**u 的大作中提到】 : 只有螺旋打印要写代码吧 : 其它的瞎blabla,说说思路
|
s******n 发帖数: 3946 | 8 螺旋打印:
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<
} |
f**********2 发帖数: 2401 | 9 求问第3题怎么回答最好?是不是用bucket sort? |
y*****n 发帖数: 243 | 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<: }
|
|
|
y*****n 发帖数: 243 | 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] + " ");
}
} |
C***U 发帖数: 2406 | 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
|
y*****n 发帖数: 243 | 13 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
用个1024的数组然后记录对应的index出现的次数就好了把。 |
P*******U 发帖数: 203 | 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;
}
}
} |
c****9 发帖数: 164 | 15 嗯,Radix sort最快吧
【在 f**********2 的大作中提到】 : 求问第3题怎么回答最好?是不是用bucket sort?
|
P*******U 发帖数: 203 | 16 第三题就是标准的bucket sort吧,O(n)的时间 |
h********w 发帖数: 221 | 17 radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了
【在 c****9 的大作中提到】 : 嗯,Radix sort最快吧
|
f**********2 发帖数: 2401 | 18 还可能有负数吧,1024不够
【在 y*****n 的大作中提到】 : 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。 : 用个1024的数组然后记录对应的index出现的次数就好了把。
|
f**********2 发帖数: 2401 | 19 同意
就好了
【在 h********w 的大作中提到】 : radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了
|
f**********2 发帖数: 2401 | 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++){
|
|
|
y*****n 发帖数: 243 | 21 10个digit不最多能有1024个数么= =我记错了?
有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后
round到0然后再走到n-1不就好了。
【在 f**********2 的大作中提到】 : 还可能有负数吧,1024不够
|
c*******2 发帖数: 173 | 22 这个办法不错啊
【在 y*****n 的大作中提到】 : 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。 : 用个1024的数组然后记录对应的index出现的次数就好了把。
|
e***s 发帖数: 799 | 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++;
}
} |
s******n 发帖数: 3946 | 24 嗯,中间的漏了,但是角上不会打两次
【在 y*****n 的大作中提到】 : 没有说是N*N的吧。而且如果N是奇数的话是不是中间那个数打不出来? 每个角落的数 : 是不是会打2次?
|
f*******l 发帖数: 66 | 25 it is counting sort, right?
【在 y*****n 的大作中提到】 : 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。 : 用个1024的数组然后记录对应的index出现的次数就好了把。
|
f*******l 发帖数: 66 | 26 why not just convert signed number to unsigned number?
【在 y*****n 的大作中提到】 : 10个digit不最多能有1024个数么= =我记错了? : 有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后 : round到0然后再走到n-1不就好了。
|
f*******l 发帖数: 66 | 27 the hash value should scatter evenly?
【在 C***U 的大作中提到】 : 什么叫hash function的技术要点? : 啥意思?
|
b******u 发帖数: 81 | |
r*****b 发帖数: 310 | 29 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
【在 b******u 的大作中提到】 : 4.螺旋打印2维数组 : 似乎应该用递归
|
y*****n 发帖数: 243 | 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
|
|
|
m********1 发帖数: 31 | |
e***s 发帖数: 799 | 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 |
y*****n 发帖数: 243 | |
s******n 发帖数: 3946 | |
s******n 发帖数: 3946 | 35 估计做得不错,能答4道题,弱的两题就没时间了
【在 y*****n 的大作中提到】 : pat pat, 第2轮可以补救的。 : 加油
|
A**u 发帖数: 2458 | 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
|
A**u 发帖数: 2458 | 37 只有螺旋打印要写代码吧
其它的瞎blabla,说说思路
【在 s******n 的大作中提到】 : 估计做得不错,能答4道题,弱的两题就没时间了
|
s******n 发帖数: 3946 | 38 还挺复杂,你来写一个吧。
【在 A**u 的大作中提到】 : 只有螺旋打印要写代码吧 : 其它的瞎blabla,说说思路
|
s******n 发帖数: 3946 | 39 螺旋打印:
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<
} |
f**********2 发帖数: 2401 | 40 求问第3题怎么回答最好?是不是用bucket sort? |
|
|
y*****n 发帖数: 243 | 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<: }
|
y*****n 发帖数: 243 | 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] + " ");
}
} |
C***U 发帖数: 2406 | 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
|
y*****n 发帖数: 243 | 44 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。
用个1024的数组然后记录对应的index出现的次数就好了把。 |
P*******U 发帖数: 203 | 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;
}
}
} |
c****9 发帖数: 164 | 46 嗯,Radix sort最快吧
【在 f**********2 的大作中提到】 : 求问第3题怎么回答最好?是不是用bucket sort?
|
P*******U 发帖数: 203 | 47 第三题就是标准的bucket sort吧,O(n)的时间 |
h********w 发帖数: 221 | 48 radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了
【在 c****9 的大作中提到】 : 嗯,Radix sort最快吧
|
f**********2 发帖数: 2401 | 49 还可能有负数吧,1024不够
【在 y*****n 的大作中提到】 : 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。 : 用个1024的数组然后记录对应的index出现的次数就好了把。
|
f**********2 发帖数: 2401 | 50 同意
就好了
【在 h********w 的大作中提到】 : radix sort你保持每一个数的顺序,还是buket sort好吧,直接数组对应的index++就好了
|
|
|
f**********2 发帖数: 2401 | 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++){
|
y*****n 发帖数: 243 | 52 10个digit不最多能有1024个数么= =我记错了?
有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后
round到0然后再走到n-1不就好了。
【在 f**********2 的大作中提到】 : 还可能有负数吧,1024不够
|
c*******2 发帖数: 173 | 53 这个办法不错啊
【在 y*****n 的大作中提到】 : 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。 : 用个1024的数组然后记录对应的index出现的次数就好了把。
|
e***s 发帖数: 799 | 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++;
}
} |
s******n 发帖数: 3946 | 55 嗯,中间的漏了,但是角上不会打两次
【在 y*****n 的大作中提到】 : 没有说是N*N的吧。而且如果N是奇数的话是不是中间那个数打不出来? 每个角落的数 : 是不是会打2次?
|
f*******l 发帖数: 66 | 56 it is counting sort, right?
【在 y*****n 的大作中提到】 : 第3题10 bit integer 才能代表1024个数。100million个数不知到有多少个重复的把。 : 用个1024的数组然后记录对应的index出现的次数就好了把。
|
f*******l 发帖数: 66 | 57 why not just convert signed number to unsigned number?
【在 y*****n 的大作中提到】 : 10个digit不最多能有1024个数么= =我记错了? : 有负数的话从第一个digit为1的那个index(比如为n)开始提取,然后走到头,然后 : round到0然后再走到n-1不就好了。
|
f*******l 发帖数: 66 | 58 the hash value should scatter evenly?
【在 C***U 的大作中提到】 : 什么叫hash function的技术要点? : 啥意思?
|
b******u 发帖数: 81 | |
r*****b 发帖数: 310 | 60 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
【在 b******u 的大作中提到】 : 4.螺旋打印2维数组 : 似乎应该用递归
|
|
|
y*****n 发帖数: 243 | 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
|
m********1 发帖数: 31 | |
m*****l 发帖数: 95 | 63 10bit只能表示1024个数,所以不用考虑负数,就像32位integer表示的数是-2^31到2^
31-1,一共2^32个数
【在 f**********2 的大作中提到】 : 还可能有负数吧,1024不够
|
s********y 发帖数: 40 | 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++;
}
} |
a******9 发帖数: 12 | 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--;
}
}
} |