边工作边刷题:70天一遍leetcode: day 4

Maximum Gap

要点:
问题:

  • 为什么用n(元素个数)作为bucket的个数?
  • 为什么用range公式

Given an unsorted array, find the maximum difference between the successive elements in its sorted form.

Try to solve it in linear time/space.

Return 0 if the array contains less than 2 elements.

You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.


class Solution(object):
    def maximumGap(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        maxv = -sys.maxint-1
        minv = sys.maxint
        n = len(nums)
        if n==0: return 0
        buckets = [[None, None] for i in range(n)]
        for i in range(n):
            maxv = max(maxv, nums[i])
            minv = min(minv, nums[i])
        
        r = (maxv-minv)/n+1
        for i in range(n):
            bn = (nums[i]-minv)/r
            if not buckets[bn][0] or buckets[bn][0]>nums[i]:
                buckets[bn][0]=nums[i]
                
            if not buckets[bn][1] or buckets[bn][1]<nums[i]:
                buckets[bn][1]=nums[i]
        
        gap = 0
        pre = buckets[0][1]
        for i in range(1, n):
            if buckets[i][0]:
                gap = max(gap, buckets[i][0]-pre)
                pre = buckets[i][1]
        
        return gap
posted @ 2016-05-23 07:06  absolute100  阅读(102)  评论(0编辑  收藏  举报