【问题标题】:Double the value of array on a match - Python在匹配中将数组的值加倍 - Python
【发布时间】:2021-10-21 15:39:18
【问题描述】:

对于一个长整数值和一个数字的数组。我需要遍历数组中的元素,并在元素等于数字时将数字的值加倍。此外,可以在迭代之前对数组进行重新排序以最大化数字的值。需要找到最大数

这是我的代码不正确! 任何帮助将不胜感激!

def doubnum(arr,num):
  for i in arr:
    if i==num:
    num=num*2
  return num
doubnum([1,2,4,11,12,8],2)

例如:[1,2,4,11,12,8],2 should be 16 的输出

【问题讨论】:

  • 只需添加sorted:for i in sorted(arr):
  • 做到了。谢谢大佬!!

标签: python arrays python-3.x list


【解决方案1】:

这似乎对我有用。我正在使用 Python 3

代码:

def doubnum(arr,num):
  for i in arr:
    if i==num:
      num=num*2
  return num

print(doubnum([1,2,4,22,12,8],2))

这打印出 16。

【讨论】:

  • 这仅适用于 2、4、8 碰巧已按升序排列在给定列表中的情况。它也与OP的代码基本相同,OP所说的不正确。
【解决方案2】:

@Chris 关于首先对arr 进行排序的评论会起作用,但会在平均时间复杂度上不必要地花费 O(n log n)

如果您先将给定数组转换为集合,然后在while 循环中将num 加倍,直到@ 987654324@ 已不在集合中:

def doubnum(arr, num):
    pool = set(arr)
    while num in pool:
        num *= 2
    return num

这样(注意24之前的8):

doubnum([8, 1, 2, 4, 11, 12], 2)

会正确返回:16

【讨论】:

    【解决方案3】:
    def doubnum(arr,num):
      for i in len(arr):
        if(num in arr):
           num=num*2
        else:
           return num
      return num
    print(doubnum([1,2,4,11,12,8],2))
    

    def doubnum(arr,num):
       if(num not in arr):
          return num
       else:
          num *=2
          return doubnum(arr,num)
    print(doubnum([1,2,4,11,12,8],2))
    

    在此之后,您不必担心重新排序。

    【讨论】:

    • 这会花费 O(n ^ 2) 的时间复杂度。
    • @blhsing 你检查了第二个答案吗?
    • 我做到了。这与第一个答案相同,只是递归地而不是迭代地实现。问题在于 in 运算符在每次查找列表中的每个项目时都会花费 O(n)
    【解决方案4】:

    只需添加排序即可通过编码中的所有测试用例

    def doubleSize(arr,b):
     arr.sort()
     for i in range(len(arr)):
          if (arr[i] == b):
            b*=2
     return b
    

    您可以在编辑器中检查此解决方案,所有测试用例 python 3.x 都可以正常工作

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2013-04-29
      • 1970-01-01
      • 2018-04-24
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多