两个数组

时间:2018-02-24 17:32:49

标签: python algorithm

您将获得一个函数

的实现
def solution(A, B)

给定N个非负整数的非空零索引数组A和M个非负整数的非空零索引数组B,返回两个数组中出现的最小值。如果没有这样的值,函数应该返回-1。

例如,给定数组A和B使得:A = [1,3,2,1]和B = [4,2,5,3,2],你的函数应该返回2,因为2是在阵列A和B中都出现的最小值)在两个阵列中出现的另一个值是3)。

给定数组A和B使得A = [2,1]和B = [3,3],你的函数应该返回-1,因为两个ararays中都没有值。

某些输入的附加代码仍然不正确。尽管存在错误,但代码可能会为示例测试用例生成正确的答案。练习的目的是找到并修复实现中的错误。您最多可以修改两行。

def solution(A, B):
    A.sort()
    B.sort()
    i = 0
    for a in A:
        if i < len(B) - 1 and B[i] < a:
            i += 1
        if a == B[i]:
            return a
    return -1

任何人都可以帮我完成这项任务吗?哪些可能的输入会产生不正确的解决方案?另外,第一个if语句的目的是什么? :

if < len(B) - 1 and B[i] < a

2 个答案:

答案 0 :(得分:4)

  

另外,第一个if语句的目的是什么?

if i < len(B) - 1 and B[i] < a:

此if语句将检查i是否在数组B的大小范围内,以及索引i处的数组B是否小于当前&#39; a&#39;元件。

然而,错误是这个if语句只检查一次条件并转到下一步,但正确的行为应该是检查直到B [i]小于当前&#39; a&#39;。

所以下面的代码应该按预期工作:

def solution(A, B):
    A.sort()
    B.sort()
    i = 0
    for a in A:
        while i < len(B) - 1 and B[i] < a:
            i += 1
        if a == B[i]:
            return a
    return -1

答案 1 :(得分:0)

只是一个想法。 为什么不与您拥有的两个数组相交。 并找到相交数组中的最小值。

This link可用于交叉两个数组

取自上面的链接(未经测试的代码)

# Python program to illustrate the intersection
# of two lists in most simple way
def intersection(lst1, lst2):
    lst3 = [value for value in lst1 if value in lst2]
    return lst3

# Driver Code
lst1 = [4, 9, 1, 17, 11, 26, 28, 54, 69]
lst2 = [9, 9, 74, 21, 45, 11, 63, 28, 26]
min(intersection(lst1, lst2), default=-1)