[Leecode] Maximum Gap
2016-02-02 20:08
288 查看
Maximum Gap
Problem: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.
题意很清晰,要找出最大的gap,但是是顺序序列最大的gap。由于要求线性时间,很容易想到算法导论中说的线性时间排序算法:Counting Sort, Radix Sort 和 Bucket Sort。题目中还有一个提示,序列中每个元素都是32 bits 的 positive integer,所以,我想用基数排序应该是比较恰当的。
基数排序的时间复杂度如下,
O(d(n+k)) 其中,d是d个digits,k是digit的种类数,例如[0-9]就是10个。
而本题中,我把一个int分成8份,每分4个bits,也就是16进制。那么,算法复杂度为:O(8(n+16))
算法实现如下,
# Max Gap # Based on Radix Sort class Solution(object): def maximumGap(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums) <= 1: return 0 # Radix Sort # Each integer is 32 bits. I divided each int into 8 parts, each part 4 bits. # Time: O(32/4 *(n+2^4)) = O(8*(n+16)) = O(n) for x in xrange(0,8): d = 15 << 4*x # filter, choose which bits would be sorted bucket = [[] for m in xrange(16)] for num in nums: b = (num & d) >> 4*x # filtering the parts of bits bucket[b].append(num) # map to bucket nums = [] # clear for section in bucket: nums += section # reordered # Find max gap gap = 0 for i in xrange(1, len(nums)): gap = max(gap, nums[i] - nums[i-1]) return gap
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解