[关闭]
@skysbjdy 2016-12-24T06:38:05.000000Z 字数 5631 阅读 12673

Amazon OA1

Interview

Debug

  1. ArraySum:
    Bug: sum = arr[i]
    Fixed: sum += arr[i]

  2. Count Occurence: 统计某数在数组中出现的次数
    Bug: while loop 里面 i++

  3. Check Grade: 计算GPA
    Bug: "||"
    Fixed: "&&"

  4. Remove Element: 删除数组特定位置的元素, 超出返回则返回原数组
    Bug: arr[i++] 第五行
    Fixed: arr[i + 1]

    1. public static int[] removeElement(int arr[], int index) {
    2. int i, j, len = arr.length;
    3. if (index < len) {
    4. for (i = index; i < len - 1; i++) {
    5. arr[i] = arr[i+1];
    6. }
    7. int rarr[] = new int[len - 1];
    8. for (i = 0; i < len - 1; i++) {
    9. rarr[i] = arr[i];
    10. }
    11. } else
    12. return arr;
    13. }
  5. Digit Count: 返回num%len(num) == 0 or != 0
    Bug: 最后返回时, num已经是0了. 所以之前要先保存起来.

    1. public int find(int num) {
    2. int count = 0;
    3. int temp = num; //add a temporary variable
    4. while (num ! = 0) {
    5. num = num / 10;
    6. count++;
    7. }
    8. //return num % count; <--Bug
    9. return temp % count; //Fixed
    10. }
  6. Sort Array
    Bug: 大于小于符号写反
    Fixed: arr[i] < arr[j]降序, arr[i] > arr[j]升序.

    1. public static int[] sortArray(int[] arr) {
    2. int len = arr.length;
    3. int small, pos, i, j, temp; //small, pos can be deleted
    4. for (i = 0; i <= len - 1; i++) {
    5. for (j = i; j < len; j++) {
    6. temp = 0;
    7. if (arr[i] < arr[j]) { // Bug '<' should be '>'
    8. temp = arr[i];
    9. arr[i] = arr[j];
    10. arr[j] = temp;
    11. }
    12. }
    13. }
    14. return arr;
    15. }
  7. Sort Array 2
    Bug: 大于小于符号写反
    Fixed: arr[i] < arr[j]降序, arr[i] > arr[j]升序.

    1. //这是一个正确的降序排列算法
    2. public static int[] sortArray2(int arr[]) {
    3. int i, max, location, j, temp, len = arr.length;
    4. for (i = 0; i < len; i++) {
    5. max = arr[i];
    6. location = i;
    7. for (j = i; j < len; j++) {
    8. if (max < arr[j]) {
    9. max = arr[j];
    10. location = j;
    11. }
    12. }
    13. temp = arr[i];
    14. arr[i] = arr[location];
    15. arr[location] = temp;
    16. }
    17. return arr;
    18. }
  8. Replace values 数组长度是偶数就把元素都改成1, 奇数就都改成0
    Bug: for loop里面 i <= len, j < = len
    Fixed: i < len, j < len

    1. public static int[] replaceValues(int arr[]) {
    2. int i, j, len = arr.length;
    3. if (len % 2 == 0) {
    4. for (i = 0; i < len; i++) { //fixed
    5. arr[i] = 0;
    6. }
    7. } else {
    8. for (j = 0; j < len; j++) { //fixed
    9. arr[j] = 1;
    10. }
    11. }
    12. return arr;
    13. }
  9. Reverse array
    但是class的名字居然是sort array
    Bug: arr[len-1]改成 arr[len-i-1] for循环里 len +=1去掉

    1. public static int[] reverseArray(int[] arr) {
    2. int i, temp, originalLen = arr.length;
    3. int len = originalLen;
    4. for (i = 0; i < originalLen / 2; i++) {
    5. temp = arr[len - i - 1];
    6. arr[len - i - 1] = arr[i]; //fixed
    7. arr[i] = temp;
    8. // len +=1;
    9. }
    10. return arr;
    11. }
  10. Even Odd pattern
    Bug: for 循环缺大括号

    1. public static void print4(int num) {
    2. int i, print = 0;
    3. if (num % 2 == 0) {
    4. print = 0;
    5. for (i = 0; i < num; i++) {
    6. System.out.print(print + " ");
    7. print += 2;
    8. }
    9. } else {
    10. print = 1;
    11. for (i = 0; i < num; i++) {
    12. System.out.print(print + " ");
    13. print += 2;
    14. }
    15. }
    16. }
  11. Manchester Code: 假设第一个element前面的数字是0
    Bug: 把判断语句的 == 改成 != (考虑i == 0的情况)

  12. Selection sort
    Bug: if里面的判断 arr[min] > arr[x], 改成arr[min] > arr[y]

    1. // selection sort in ascending order
    2. for (x = 0; x < n; x++) {
    3. int index_of_min = x;
    4. for (y = x; y < n; y++) {
    5. //if (arr[index_of_min] > arr[x]) { // Bug
    6. if (arr[index_of_min] > arr[y])
    7. y = index_of_min;
    8. }
    9. int temp = arr[x];
    10. arr[x] = arr[index_of_min];
    11. arr[index_of_min] = temp;
    12. }
    13. }
    14. // bubble sort in descending order
    15. for (int x = 0; x < n; x++) {
    16. for (int y = x; y < n; y++) {
    17. if (arr[x] < arr[y]) {
    18. int temp = arr[x];
    19. arr[x] = arr[y];
    20. arr[y] = temp;
    21. }
    22. }
    23. }
  13. Insertion sort
    Bug: 大于小于x

    1. for (int i = 1; i < n; i++) {
    2. if (arr[i - 1] > arr[i]) { int temp = arr[i]; //Bug
    3. int j = i;
    4. while (j > 0 && arr[j - 1] > temp) { //Bug arr[j - 1] > temp
    5. arr[j] = arr[j - 1];
    6. j--;
    7. }
    8. arr[j] = temp;
    9. }
    10. }
  14. Print Pattern
    a
    ab
    abc
    Bug: char ch = 'a' 定义在了for loop前面, 移进来就好, 同时删除了没用的变量

    1. //This code is correct
    2. public static void print2(int row) {
    3. for (int i = 1; i <= row; i++) {
    4. char ch = 'a';
    5. char print = ch;
    6. for (int j = 1; j <= i; j++) {
    7. System.out.print((print++));
    8. }
    9. System.out.println();
    10. }
    11. }
    12. //可以继续优化:
    13. public static void print2(int row) {
    14. for (int i = 1; i <= row; i++) {
    15. char ch = 'a';
    16. for (int j = 1; j <= i; j++) {
    17. System.out.print((ch++));
    18. }
    19. System.out.println();
    20. }
    21. }
  15. Print Pattern
    Row number = 3
    11
    1111
    111111

    Row number = 2
    11
    1111
    Bug: 第一层for循环少了大括号,

    1. public static void print3(int row) {
    2. int x = 1;
    3. for (int i = 1; i <= row; i++) { //添加括号
    4. for (int j = i; j > 0; j--) {
    5. System.out.print(x + "" + x);
    6. }
    7. System.out.println();
    8. } //添加括号
    9. }
  16. remove duplicates from unsorted array
    Bug: 循环下标要从i + 1开始

  17. Array奇数偶数
    Bug: for loop i += 2 改成i++

Reasoning

  1. QPS : TSV -> IHK : (LKN) (+3)
  2. 46 : 64 -> 82 : (100)(差为18) 也可能是28, 交换个位十位的位置,也可能是+2,-2 ??
  3. EAGLE : FZHKF -> THANKS : (UGBMLR) +1, -1 找规律的(奇数+1偶数-1)
  4. FASTER : HCUVGT -> SLOWER --> (UNQYGT) (+2)
  5. 985 : 874 -> 763 : (652) (-1)
  6. 865 : 532 -> 976 : (643) (-3)
  7. ADBC : EHFG -> ILJK : (MPNO)(4个一组)
  8. JOHN : LSNV -> MARK : (OEXS)(+2 +4 +6 +8)
  9. COMP UTER : PMOC RETU -> TELEV ISION : (VELET NOISI)(镜像倒过来)
  10. A17R : D12P -> G7N : ? (R=A+17)
  11. COMPUTER : GKQLYPIN -> SENATE : WARWXA(奇数+4偶数-4)
  12. KPQR : LRTV -> DGHY : (EIKC) (前后相减每一位的增加分别为1,2,3,4)
  13. ACFJ : CEHL -> PRUY : (RTWA) (前后项差2)
  14. VALIANT : UBKJZOS -> TRANSCEND : SSZORDDOC (-1 +1交替)
  15. 27 : 24 -> 64 : (60)(24=3^3-3,64=4^3,4^3-4=60)
  16. MQD : KRK -> SWM : (TQX)or(NCF)(13, 17, 4;11, 18, 11; 交叉 -5(13-18) 6(17-11) -7(4-11))
  17. AD5 : ED9 求和(A + D = 5, E + D = 9)
  18. BGL : DIN : MRW : NTB(第一项+2就是第二项) 原答案 HLR(差5差6)????好像不太对啊??
  19. PRS TVX FIK LME 只有最后一个不是递增
  20. JLP LNT TVZ DFJ(其他的都是+2 +4)
  21. ~ABIJ~ DEHI MNQR STWX(ABIJ前后一对间距不同)
  22. ADP QTS HKR STE (选1?都是完全平方数?,或者QTS,位与的结果不是0?)
  23. RHCAI OEST HNDA ADEH(RHCAI?只有这个不是身体部位?)
  24. ADF ~MPR~ ILN EHJ(2?只有它不是以元音开头?)
  25. STV XYA KKT BDE(其他都是两偶一奇,只有KKT是两奇一偶)
  26. 956 794 884 678(678,前几组加起来和都是20)
  27. 1,4,16 17,20,24 8,11,18 19,20,5 (其他的和为奇数, 最后一个为偶数)(感觉是最后一个,间距不是3的倍数)
  28. AE5 DF6 HN14 ~KP2~(感觉选KP2,因为P!=2)
  29. HIK DGJ LPT SUW(1,因为不是等间距)
  30. LKJI XYWV WVUT KJIH(其他的都是倒序)
  31. 2,3,7,8,13,14,(20) (20?相差5,6,7?)
  32. 0 1 1 2 4 8 (16)(16前面的所有数加起来)
  33. 3,6,18,108,(1944) (18 * 6 = 108,所以应该是18*108)
  34. 1,1,4,2,13,3,40,4,(121)(1+3的1次方=4,4+3的2次方=13,13+3的3次方=40,40+3的4次方=121)
  35. 3 7 13 21 (31) (相差每次增长2)
  36. 5 11 19 29 (41)(相差每次增长2)
  37. 0 2 6 12 20 (30)(相差每次增长2)
  38. 5 9 16 29 (54) 5*2-1, 9*2-2, 16*2-3, 29*2-4
  39. 4 12 6 18 12 36 30 (90)(奇数位乘以3就是偶数位)
  40. 1 5 (8) (1 + 2^2 = 5, 5 + 2^1 = 7 ,7 + 2^0 = 8) 应该是1, 5, 7, (8)
  41. D, H, L, (p) (P,等间距)
  42. 10 14 23 39 64 (100)(间距为完全平方数4, 9, 16, 25, 36)
  43. 10 74 202 394 650(间距递增64)
  44. 2 8 5 6 8 (4) 11(应该是4吧,两两这么看的, 2、5、8、11, 加3得来的。 另外一组应该是减2,也就是8、6、4)
  45. 16 30 46 62 (82), (98) (13+3, 29+1, 43+3, 61+1 然后前面的都是质数,每个质数之间隔了三个质数, 61之后第四个质数是79, 79+3=82, ,或者16加上后面的数为第二个的结果)
  46. 1:4:27:256:? 3125(n^n)
  47. 2, 5, 26,(677)(规律是当前数字是前一个数字平方加1)
  48. ASSERTIVENESS-> SENSSAEVISTRE : MULTINATIONAL -> ?(记录ASSERTIVENESS每个字母的位置,再记录下SENSSAEVISTRE每个字母的位置,找出mapping关系(比如A在ASSERTIVENESS中第一个位置,在SENSSAEVISTRE第六个位置,那么1->6)。最后记录MULTINATIONAL每个字母的顺序,按照之前找出的mapping对找出来(如M肯定会在所求字符串的第六个位置)。这种题字符串的长度和所包含的字母个数肯定是一样的。)重复字母的情况是有一定规律的,你看ASSERTIVENESS-> SENSSAEVISTRE , 123456789,10,11,12,13 -> 12,11,10,3,2,1,9,8,7,13,6,5,4 (用重复的字母把字符串隔开,就能看到排列顺序了)【2】ass 【5】ert 【3】ive 【1】nes 【4】s
  49. 原题字母,这里直接用数字表示:(DELHI)4,5,12,8,9 => 3,4,1,7,8问 13, 21, 13, 2, 1, 9 => ? (网上解法有:4, 5, 12, 8, 9 => (4 - 1), (5 - 1), (1 - 0)(2 - 1), (8 - 1), (9 - 1),so13, 21, 13, 2, 1, 9 => 02, 10, 02, 1, 0,8 或者4 5 12 8 9 -> 3 4 1 7 8 (每位都-1)13 21 13 2 1 9 -> 02 10 02 1 26 8 就是2 10 2 1 26 8 (B J B A Z H)
  50. 0, 1, 1, 2, 3, 7, (22)
    0 * 1 + 1 = 1,
    1 * 1 + 1 = 2,
    1 * 2 + 1 = 3,
    2 * 3 + 1 = 7,
    3 * 7 + 1 = 22
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注