螞蟻的筆試題目

面試了某螞蟻,筆試題目,沒有編譯器,直接白板寫代碼,夠溜的,用了暴力破解,有點問題,沒有達到最優面試

 

題目:給你一個數組和一個數字num,找出數組中兩個數a 和b,使得a+b 與 num 的差的絕對值最小。好比輸入[8,3,6,1] 和13,輸出8 和6。數組

 

輸入的代碼:spa

array1,num1=input().split(" ") array=[] array=array1[1:-1].split(",") array=list(map(int,array)) num=int(num1) print(array) print(num)

 

解決問題的部分,主要思路是:先把array排序,用兩個指針,一個在左邊,一個在右邊,兩個指針所指的數字之和,若是大於13,那麼j--   若是小於13,那麼i++指針

這樣的話,就能夠比暴力破解更快code

array.sort() length=len(array) i=0 j=length-1 deta=0 temp_min=num while i<j-1: temp_sum=array[i]+array[j] deta=abs(temp_sum-num) if deta<temp_min: temp_min=deta index_i=i index_j=j i+=1
    if deta>temp_min: j-=1
print(array[i],array[j])
相關文章
相關標籤/搜索