1. 程式人生 > >【演算法題】找到陣列中和為固定值的兩個元素

【演算法題】找到陣列中和為固定值的兩個元素

在閱讀的過程中有任何問題,歡迎一起交流

QQ:1494713801

題目:編寫一個函式,輸入為一個int型的陣列numbers和一個int型變數target,找到這個陣列中和為target的兩個元素,輸出其index

假設每組輸入有且僅有一組輸出

示例

Input: numbers={6, 2, 15, 7,11}, target=9

Output: index1=1, index2=2

解答

1.查詢法

兩層遍歷,最直觀

時間複雜度:O(N*N)

2.排序法

numbers按遞增排序(快排),設定兩個遊標idx1idx2

Idx1=0

Idx2=numbers.size

如果numbers[idx1]+numbers[idx2]==target,

則要求的解為numbers[idx1]在原數列中的下標(現在的numbers是已經排序後的)和numbers[idx2]在原數列中的下標;

如果numbers[idx1]+numbers[idx2]>target,idx2--;

如果numbers[idx1]+numbers[idx2]<target,idx1++;

時間複雜度: O(N*logN)

3. 利用Map:

建立一個空Mapmap中儲存的是已經掃描過的number。

<K, V><numbers值,numbers下標>

對於numbers[i],如果map中存在K=target-numbers[

i],則要求的解為V(K=target-numbers對應的)和i如果不存在,則向map中新增<numbers[i],i>

時間複雜度:O(N)