程序以查找Python中任意数字及其下一个较小数字的最大差

假设我们有一个称为nums的数字列表,我们必须找到任何数字与下一个较小数字之间存在的最大差。我们的目标是在线性时间内解决这个问题。

因此,如果输入类似于nums = [14、2、6、35、12],则输出将为21,因为35和14的最大差值为21。

为了解决这个问题,我们将遵循以下步骤-

  • max_val:=最大值,min_val:=最小值

  • 如果max_val与min_val相同,则

    • 返回0

  • delta:=(max_val − min_val)/(nums − 1的大小)

  • min_map:=一个空的映射(如果某些值不存在,则返回值为inf)

  • max_map:=一个空映射(如果某些值不存在,则返回值为-inf)

  • res:= 0,idx:= 0

  • 对于nums中的每个num,执行

    • idx:=(((num − min_val)/ delta)的下限

    • max_map [idx]:= max_map [idx]和num的最大值

    • min_map [idx]:= min_map [idx]和num的最小值

  • prev:= min_val

  • 对于0到nums-1范围内的i

    • res:= res的最大值和(min_map [i] −上一页)

    • 上一个:= max_map [i]

    • 如果min_map [i]与inf不同,则

  • 返回res

让我们看下面的实现以更好地理解-

示例

from collections import defaultdict

import math

class Solution:

   def solve(self, nums):

      max_val = max(nums)

      min_val = min(nums)

      if max_val == min_val:

         return 0

      delta = (max_val − min_val) / (len(nums) − 1)

      min_map = defaultdict(lambda: float("inf"))

      max_map = defaultdict(lambda: float("−inf"))

      res = 0

      idx = 0

      for num in nums:

         idx = math.floor((num − min_val) / delta)

         max_map[idx] = max(max_map[idx], num)

         min_map[idx] = min(min_map[idx], num)

      prev = min_val

      for i in range(len(nums)):

         if min_map[i] != float("inf"):

            res = max(res, min_map[i] − prev)

            prev = max_map[i]

      return res

ob = Solution()

nums = [14, 2, 6, 35, 12]

print(ob.solve(nums))

输入值

[14, 2, 6, 35, 12]

输出结果

21

以上是 程序以查找Python中任意数字及其下一个较小数字的最大差 的全部内容, 来源链接: utcz.com/z/315923.html

回到顶部