最大间距
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
示例 1:
输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
示例 2:
输入: [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。
java
太简单了,就不说了,
优化就是排序算法的优化
直接sort最简单
不然最快的可考虑桶排序
class Solution {
public int maximumGap(int[] nums) {
if(nums.length<2)return 0;
Arrays.sort(nums);
int max = 0;
for(int i =0;i<nums.length-1;i++){
if(max<=(Math.abs(nums[i]-nums[i+1]))){
max = Math.abs(nums[i]-nums[i+1]);
}
}
return max;
}
}
python
class Solution:
def maximumGap(self, nums: List[int]) -> int:
nums.sort()
maxnum =0
for i in range(0,len(nums)-1):
if maxnum <= abs(nums[i]-nums[i+1]):
maxnum = abs(nums[i]-nums[i+1])
return maxnum
桶排序:
/**作者: leetcode: gymer
class Solution(object):
def maximumGap(self, nums):
if len(nums) < 2:
return 0
min_val, max_val, n = float('inf'), float('-inf'), len(nums)
for i in range(n):
if nums[i] < min_val:
min_val = nums[i]
if nums[i] > max_val:
max_val = nums[i]
if min_val == max_val:
return 0
mins = [0] * (n + 1)
maxs = [0] * (n + 1)
has_num = [False] * (n + 1)
for num in nums:
index = int((num - min_val) * n / (max_val - min_val))
mins[index] = num if not has_num[index] else min(mins[index], num)
maxs[index] = num if not has_num[index] else max(maxs[index], num)
has_num[index] = True
max_len = 0
m = maxs[0]
for i in range(1, n + 1):
if has_num[i]:
curr_len = mins[i] - m
if curr_len > max_len:
max_len = curr_len
m = maxs[i]
return max_len