面試了某螞蟻,筆試題目,沒有編譯器,直接白板寫代碼,夠溜的,用了暴力破解,有點問題,沒有達到最優面試
題目:給你一個數組和一個數字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])