问题描述:
给定一个数列 nums 里面全是整数,且所有数字子不重复,求数列任中任意两个值差的最小绝对值是多少?
问题分析:
因为没有重复项,那么可以采用桶排序,然后遍历获取最小值,其实如果有重复项,也没有关系,依旧可以采用桶排序,如果排序后长度减少,那么绝对值最小的一定是0,因为有重复项吗。
Python实现:
# 面试题,最小绝对值,解题思路,桶排序 # @Time :2018/5/31 # @Author :LiuYinxing class Solution: def getSolution(self, nums): n = len(nums) if n < 2: return None mn, mx = min(nums), max(nums) slist = [None] * (mx - mn + 1) rmin = float('inf') for v in nums: # 桶排序 slist[v-mn] = v slist = [v for v in slist if v != None] for i in range(n-1): rmin = min(abs(slist[i]-slist[i+1]), rmin) return rmin if __name__ == '__main__': solu = Solution() nums = [3, 4, 5, 9, 0, 1, -1, 12] print(solu.getSolution(nums))发现问题评论指正哦。