164. Maximum Gap

问题描述

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.

问题分析

又是一道hard题,上来直接没思路呀。
参考了网上的解题报告,是利用桶排序的思想。
最关键的一点是,设数组中有n个元素,其中最大值为b,最小值为a,则排序后相邻两个元素的差值不会小于⌈(b-a) / (n-1)⌉
因此做法为,设置桶的大小为size = ⌈(b-a) / (n-1)⌉,那么桶的个数为(b-a) / size + 1;遍历数组,对每个桶记录其最大值和最小值;最后遍历一遍桶,最大的gap不会出现在桶的内部,而在桶之间,因此获得“后一个非空桶的最小值减前一个非空桶的最大值”的最大值,即为要求的值。

AC代码

class Solution(object):
    def maximumGap(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if n < 2:
            return 0
        b = a = nums[0]
        for i in nums:
            if i > b:
                b = i
            if i < a:
                a = i
        if a == b:
            return 0
        size = (b-a) / (n-1)
        if (b-a) % (n-1) != 0:
            size += 1
        num = (b-a) / size + 1
        bucket_b = [None for i in range(num)]
        bucket_a = [None for i in range(num)]
        for i in nums:
            bucket = (i-a)/size
            if not bucket_b[bucket] or i > bucket_b[bucket]:
                bucket_b[bucket] = i
            if not bucket_a[bucket] or i < bucket_a[bucket]:
                bucket_a[bucket] = i
        gap = 0
        p = 0
        while True:
            q = p+1
            while q < num and not bucket_a[q]:
                q += 1
            if q == num:
                break
            if gap < bucket_a[q] - bucket_b[p]:
                gap = bucket_a[q] - bucket_b[p]
            p = q

        return gap

Runtime: 59 ms, which beats 83.05% of Python submissions.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,779评论 0 33
  • 纯白篇的内容针对于完全没有接触过淘宝客但是又想进入这个行业的新人,大牛可以略过。 第一步:了解淘宝客到底是什么? ...
    淘客优惠卷阅读 1,565评论 0 3
  • 今天说说我理解的区块链吧,之前还没有正式总结过。 要谈区块链,就不能不谈比特币。比特币作为第一个成功应用的区块链项...
    火星茶馆阅读 255评论 1 0
  • 1 其实有时候我们的努力根本显得那么的微不足道,我们总是以为自己已经在很努力的学习,很努力的工作,其实回头看看,好...
    无人能及宋漂亮阅读 227评论 0 0
  • 2017年5月28日 晴 开车下了高速,大片的麦田出现在眼前,金灿灿的,远处一排绿树,间或有高高架起的电线塔和人家...
    李叨叨不唠叨阅读 237评论 0 1