【问题标题】:linked list or array , how to solve this que?链表或数组,如何解决这个问题?
【发布时间】:2018-02-12 12:24:59
【问题描述】:

我们定义一个匹配的有序对如下:

给定某个整数 K,(a, b) 是一个匹配的有序对当且仅当 a + b = K 且 a ≤ b。

给定一个包含 N 个整数的数组。一些阵列很好,而另一些阵列很差。

的目标 问题是检查给定的数组是否是好的。

我们递归地定义一个 GOOD 数组: 一个空数组是好的。 考虑一个大小为 2 的数组 [a, b]。当且仅当 (a, b) 是匹配的有序对时,此数组才是 GOOD。

注意 那:即使 (b, a) 是匹配的有序对,这个数组也不是 GOOD。例如,如果 K = 10,则数组 [2, 8] 是 GOOD,而数组 [7, 3] 不是 GOOD。 包含在匹配有序对中的子数组是 GOOD。注意:匹配的有序对 数组中的格式必须为 (ai , aj ) 其中 i

以下是 K = 10 的 GOOD 数组的一些示例:

[1, 2, 3, 7, 8, 9], [1, 9, 3, 7], [1, 5, 5, 9, 3, 2, 8, 7]

以下是 K = 10 的 BAD 数组的一些示例:

[1, 2, 9, 8], [9, 2, 8, 1]

我无法解决这个 pratise 问题。我该如何处理?

【问题讨论】:

    标签: arrays recursion linked-list


    【解决方案1】:

    进来的东西,必须出来的东西。我们可以这样写,[1, 5, 5, 9, 3, 2, 8, 7]

    [1, 5, 5, 9, 3, 2, 8, 7]
     (  (  )  )  (  (  )  )
    

    使用相同的逻辑检查有效括号。

    Python 代码:

    def f(arr, k):
      stack = [arr[0]]
    
      for i in xrange(1, len(arr)):
        if stack:
          last = stack[ len(stack) - 1 ]
          if arr[i] >= last and arr[i] + last == k:
            print str(last) + ' ' + str(arr[i]) + ' match! Popping...'
            stack.pop()
            continue      
        stack.append(arr[i])
    
      return 'GOOD' if not stack else 'BAD'
    

    输出:

    => f([1, 5, 5, 9, 3, 2, 8, 7], 10)
    5 5 match! Popping...
    1 9 match! Popping...
    2 8 match! Popping...
    3 7 match! Popping...
    => 'GOOD'
    
    => f([9, 2, 8, 1], 10)
    2 8 match! Popping...
    => 'BAD'
    

    【讨论】:

      【解决方案2】:

      1.取第一个元素,(a) 2.与所有其他元素(b)比较以检查其总和是否为K(= 10) 3.如果 sum 给出 K(=10), i) 检查 a

      【讨论】:

        猜你喜欢
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 2021-06-19
        相关资源
        最近更新 更多