我们定义匹配的有序对,如下所示:
给定,一些整数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]
我无法解决这个问题。我该怎么办呢?
答案 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'