演算法基礎課 陣列元素的目標和

2021-10-08 20:08:40 字數 1034 閱讀 3181

還是雙指標。暴力解法複雜度為o(n^2),找到單調性後可以降到o(n+m)。

暴力解法:對於每個a陣列的元素,遍歷每個b陣列的元素,檢視是否和為目標值。

由於陣列有序,所以可以找到規律。

單調性解法:如果a的某個元素和b的某個元素加起來剛好大於x,b元素再往前挪就小於x了。此時,如果a的元素向後移動,和該b元素加起來也絕對大於x。所以,a元素往後挪,此時b元素肯定要往前挪。所以我們可以從後往前遍歷一次b陣列。

仔細想想,確實應該先用a的最小值和b的最大值加。如果a的最小值和b的某個元素相加都大於x的話,這個b元素後面的元素都不用看了。

給定兩個公升序排序的有序陣列a和b,以及乙個目標值x。陣列下標從0開始。

請你求出滿足a[i] + b[j] = x的數對(i, j)。資料保證有唯一解。

輸入格式

第一行包含三個整數n,m,x,分別表示a的長度,b的長度以及目標值x。第二行包含n個整數,表示陣列a。第三行包含m個整數,表示陣列b。

輸出格式

共一行,包含兩個整數 i 和 j。

資料範圍

陣列長度不超過100000。

同一陣列內元素各不相同。

1≤陣列元素≤109

輸入樣例:

4 5 6

1 2 4 7

3 4 6 8 9

輸出樣例:

1 1

#include

using

namespace std;

int n,m,x;

const

int n=

1e6+10;

int a[n]

,b[n];

intmain()

}return0;

}

基礎演算法 陣列元素目標和

問題 給定兩個公升序排序的有序陣列a和b,以及乙個目標值x。陣列下標從0開始。請你求出滿足a i b j x的數對 i,j 經驗 做這種型別的題目先使用暴力方法求解,然後分析其規律,再考慮優化解法,比如雙指標解法。1 暴力解法 時間複雜度o n n for int i 0 i n i for int...

演算法基礎課筆記

方法步驟 1 確定分界點。一般取q l q r q l r 2 作為樞紐。2 調整區間,左邊的都是小於等於樞紐值,右邊的都是大於等於樞紐值。最重要 3 遞迴處理左右兩段。快速排序模板 void quick sort int q int l int r quick sort q,l,j quick s...

演算法基礎課 陣列模擬棧 佇列

二 陣列模擬佇列 用陣列模擬棧,可以幫助我們理解棧的本質。模擬棧的關鍵點就是 棧頂指標 這比鍊錶簡單多了,鍊錶需要知道頭尾 每個節點的前後指標,而棧只有乙個指標!隨著不斷地push和pop,棧頂指標會不斷向後移動,前面的空間就浪費了。這對於演算法題來說是可以忍受的,畢竟更看重時間效率。include...