做了一道題,有乙個有序陣列a,包含n個元素[a1,a2,...,an],找出相加等於x的兩個數的下標
。我看到這道題,第乙個想法是,這兩個數肯定不止一樣的,不管它要求是返回乙個就行還是返回所有,我都返回所有。我用python語言實現,借鑑二分查詢法,複雜度nlogn,不知道有沒大神有更好的解法,我只能做到這了。**如下:
__author__ = 'weixin'#-*- coding:utf-8 -*-
def findadd(list,num):
length = len(list)
indexlist =
for index,value in enumerate(list):
start = index
end = length
while startmid = int((start+end)/2)
if list[mid]+value < num:
start = mid+1
else:
end = mid
if list[start] + value == num and (start != index):
return indexlist
#測試**
list = [1,2,2,3,4,5,6,7,8]
print findadd(list,7)
執行結果
[(6, 0), (5, 1), (5, 2), (4, 3)] 正確
求陣列中相差最小的兩個數O N
基本思想 1.遍歷該陣列 找出該陣列中最小和最大值,則所求的兩個整數的差值一定小於等於max min 2.從頭開始 乙個乙個元素與 max min 2 比較,如果小於,則表示所求的兩個整數的差值介於min 到 a i 之間 更新max a i 如果大於,則表示所求的兩個整數的差值介於a i 到max...
交換兩個陣列使兩個陣列和的差最小
有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...
交換兩個陣列使兩個陣列和的差最小
有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...