2017-02-10 72 views
-1

我试图解决另一个Question需要帮助解决二进制搜索

我已经实现了解决这个问题所需的二进制搜索功能,但我不能返回正确的值,这将有助于我解决这个问题。这是我的代码。

请帮我解决这个问题。

def BinarySearch(arr,low,high,search): 
    while(low<=high): 

     middle=(low+high)/2 
     int_mid=int(middle) 
     print(int_mid) 

     if arr[int_mid]==search: 
      return int_mid 
     elif arr[int_mid]>search: 
      low=int_mid+1 
     elif arr[int_mid]<search: 
      high=int_mid-1 


    return arr[int_mid] 


tc=int(input()) 

while(tc>0): 
    size=int(input()) 

    A=list(map(int,input().split())) 
    B=list(map(int,input().split())) 

    monkiness=[] 


    for i in range(len(A)): 
     for j in range(len(B)): 

      if (j>=i): 
       y=BinarySearch(B,0,len(B),B[j]) 
       z=BinarySearch(A,0,len(A),A[i]) 

      print(y,z) 
      if y>=z: 

       m=j-i 
       monkiness.append(m) 

if len(monkiness)==0: 
    print(0) 
else: 
    print(monkiness) 
    maxiumum=max(monkiness) 
    print(maxiumum) 
tc-=1 
+0

你的输入和输出是什么? –

+0

它的值大约是1000+,所以它不适合here.Plus代码无法打印输出,因为在线编译器有时间限制,我的代码超过了时间限制。超链接提到了问题以及样本输入和输出。 –

+0

二进制搜索不是最好的方法,但它可能可行。但是你需要自己创建一个测试用例 - 如果除了在一些随机网站上不能测试代码,可能会有比你猜测的更多或不同的问题。如果你要求其他人发现问题,提供一个失败或者太慢的测试用例几乎是必须的。 –

回答

1
  1. 你不需要在这里二进制搜索(“这里”意味着你的代码提供,而不是问题的解决)
  2. 即使你需要二进制搜索,BinarySearch对于非递减排列,但你有不增加的数组。
  3. 目标是通过利用数组排序的事实,找到解决方案,运行时间少于N^2次。
+0

我需要二进制搜索来找到解决方案,就好像我使用线性搜索,我得到的时间超过error.And我正在使用二进制搜索按降序order.All输入按降序排列。 –