首页 > 编程语言 > 详细

Maximum Gap——无序数组中,排序后相邻的两个数,差值最大为多少

时间:2019-03-20 15:45:11      阅读:129      评论:0      收藏:0      [点我收藏+]

给定一个未经排序的数组,请找出其排序表中连续两个要素的最大间距。

如果数组中的要素少于 2 个,请返回 0.

给定数组 [1, 9, 2, 5],其排序表为 [1, 2, 5, 9],其最大的间距是在 5 和 9 之间,= 4.


 1 class Solution:
 2     """
 3     @param nums: an array of integers
 4     @return: the maximun difference
 5     """
 6     def maximumGap(self, nums):
 7         # write your code here
 8         if nums is None or len(nums) < 2:
 9             return 0
10             
11         MIN, MAX, n = nums[0], nums[0], len(nums)
12         for num in nums:
13             MIN, MAX = min(MIN, num), max(MAX, num)
14             
15         if MIN == MAX:
16             return 0
17         
18         # 最后的的答案一定大于等于 bucket_size
19         # 因为只有这n个数均匀排列才等于bucket_size
20         # 否则一定大于bucket_size
21         bucket_size = (MAX - MIN) / (n - 1)
22         buckets = [None for i in range(n)]
23         
24         # 将每个数放到相应的桶内
25         for num in nums:
26             bucket_id = int((num - MIN) // bucket_size)
27             if buckets[bucket_id] == None:
28                 buckets[bucket_id] = [num, num]
29             else:
30                 buckets[bucket_id][0] = min(buckets[bucket_id][0], num)
31                 buckets[bucket_id][1] = max(buckets[bucket_id][1], num)
32         
33         ans, pre_bucket = 0, None
34         
35         for cur_bucket in range(len(buckets)):
36             if buckets[cur_bucket] == None:
37                 continue
38             if pre_bucket != None:
39                 ans = max(ans, buckets[cur_bucket][0] - buckets[pre_bucket][1])
40             pre_bucket = cur_bucket
41         
42         return ans

 

Maximum Gap——无序数组中,排序后相邻的两个数,差值最大为多少

原文:https://www.cnblogs.com/liqiniuniu/p/10565027.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!