链表或数组,如何解决这个问题?

时间:2018-02-12 12:25:00

标签: arrays recursion linked-list

我们定义匹配的有序对,如下所示:

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

我们得到一个N个整数的数组。有些阵列是好的,而有些阵列是坏的。

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

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

请注意 即:即使(b,a)匹配有序对,该数组也不好。例如,如果K = 10,则为数组 [2,8]是好的,而数组[7,3]不是好的。 包含在匹配的有序对中的子阵列是GOOD。请注意:匹配的有序对 在数组中必须是形式(ai ,aj)其中i< j和ai是索引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]

我无法解决这个问题。我该怎么办呢?

2 个答案:

答案 0 :(得分:0)

1.第一元素,(a) 2.与所有其他元素(b)比较,检查其总和是否给出K(= 10) 3.总和给出K(= 10),       i)检查< = b是否为真,然后从数组中删除a和b并从步骤1开始重复。       ii)如果< = b为假,则其BAD阵列。无需进一步的步骤 如果总和不给K(= 10),     然后是它的BAD阵列。无需进一步的步骤

答案 1 :(得分:0)

什么进来,必须出来。我们可以写这个,[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'