CareerCup 150 (Cracking the Coding Interview)是由 Google 的前员工撰写的,一本针对程序员面试的攻略,其中囊括了许多 IT 巨头的面试流程。这本书的题目难度适中,不是很难,但是想要一次把代码写正确,却需要多多练习。

这本书盛名已久,我就不多介绍了,书中提供的解答是 Java 版本的,我自己喜欢用 C,所以在这里记录 C 语言版本的解答,希望和大家多多交流。

------------------------------- 1.1.c -----------------------

题目我就不在这里写了,网上到处都有的。

两种方法:一种是直接遍历,另一种是使用快排,边排序边找。

 
  
  1. /* This is one of the solution set to CareerCup 150 problems.

  2. *

  3. * Problem 1.1

  4. *

  5. * Compile command: gcc 1.1.c -std=c99

  6. */

  7. #include <stdio.h>

  8. #include <stdlib.h>

  9. #include <string.h>

  10. int straightWay(char *str); //O(n^2) time, O(n) space

  11. void quicksort(char *str, int length); //O(nlogn) time, O(n) space

  12. int main(int argc, char *argv[])

  13. {

  14. if(argc != 3)

  15.    {

  16.        printf("usage: <program name> <type<type 1:straightWay 2:quicksort> <string>\n");

  17. return 1;

  18.    }

  19. switch(atoi(argv[1]))

  20.    {

  21. case 1:

  22. if(straightWay(argv[2]))

  23.                printf("Dup.\n");

  24. break;

  25. case 2:

  26.            quicksort(argv[2], strlen(argv[2]));

  27. break;

  28. default:

  29.            printf("Wrong choice.\n");

  30. break;

  31.    }

  32. return 0;

  33. }

  34. int straightWay(char *str)

  35. {

  36. int i=0,j=0;

  37. int len = (int)strlen(str);

  38. while(i < len)

  39.    {

  40. for(j=i+1; j < len; j++)

  41.        {

  42. if(str[i] == str[j])

  43.            {

  44. return 1;

  45.            }

  46.        }

  47.        i++;

  48.    }

  49. return 0;

  50. }

  51. void quicksort(char *str, int length)

  52. {

  53. int low, high;

  54. char pivot, tmp;

  55. if (length < 2)

  56. return;

  57.    pivot = str[0];

  58.    low = 0;

  59.    high = length;

  60. for(;;)

  61.    {

  62. while(str[++low] < pivot && low < length);

  63. if(str[low] == pivot)

  64.        {

  65.            printf("Dup.\n");

  66. return;

  67.        }

  68. while(str[--high] > pivot);

  69. if(low >= high)

  70. break;

  71.        tmp = str[low];

  72.        str[low] = str[high];

  73.        str[high] = tmp;

  74.    }

  75.    tmp = str[low - 1];

  76.    str[low - 1] = str[0];

  77.    str[0] = tmp;

  78.    quicksort(str, low - 1);

  79.    quicksort(str + low, length - low);

  80. }