Bucket Sort

这题用 bucket sort只是取个巧,实现面试肯定会指出消耗太多空间的问题 所以还是应该掌握到using heap的方法

  • 这题真正在考会不会写radix sort,只是也可以用Bucket sort来优化

  • 这题的意思就是给你一个unsorted array,求sort之后任意两个数之间的最大差

  • brute force的做法就是先排序,然后挨个找difference,O(NLogN)时间解决

    public int maximumGap(int[] nums) {
          //brute force sort and find diff
          //O(NLogN)
          if(nums == null || nums.length < 2) return 0;
          Arrays.sort(nums);
          int res = 0;
          for(int i = 1 ; i< nums.length; i++){
              int diff = nums[i] - nums[i-1];
              res = Math.max(res, diff);
          }
          return res;
      }
  • 但明显不符合O(N)的要求,于是自然想到,什么排序方法能实现O(N)呢?Bucket Sort, Radix Sort还是Counting Sort?

  • 于是乎看了Dicuss里帖子,自己照着思路调了1小时才bug free,看起来算法简单,其实写起来还是有点难度的,各种corner case

  • 其实这题用Radix sort更简单,可以写一个Radix sort array的method

  • sort完之后直接扫一遍得出maxGap,代码比Bucket Sort的要好写很多

Last updated

Was this helpful?