算法题-最小绝对值问题-Python

问题描述:

给定一个数列 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))
发现问题评论指正哦。

猜你喜欢

转载自blog.csdn.net/xx_123_1_rj/article/details/80530498