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

2021-10-02 16:19:49 字數 1275 閱讀 9833

問題:給定兩個公升序排序的有序陣列a和b,以及乙個目標值x。陣列下標從0開始。請你求出滿足a[i] + b[j] = x的數對(i, j)。

經驗:做這種型別的題目先使用暴力方法求解,然後分析其規律,再考慮優化解法,比如雙指標解法。

1、暴力解法(時間複雜度o(n*n)):

for (int i = 0; i < n; i ++)

for (int j = 0; j < m; j ++)

if (a[i] + b[j] == x) pfintf("輸出結果!");

2、根據給出的公升序排序的有序陣列a和b,可以使用單調性來解決這個問題。

//i為a陣列首位值,j為b陣列末尾值

for (int i = 0; i < n; i ++)

//a陣列從最小的數(起始值)開始與b陣列最大的數(末尾值)進行相加,如果大於x,則b陣列末尾數j往前移動一位,直到a + b <= x.

這樣求出來的時間複雜度為o(n + m)。

給定兩個公升序排序的有序陣列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≤陣列元素≤1091≤陣列元素≤109

輸入樣例:

4 5 6

1 2 4 7

3 4 6 8 9

輸出樣例:

1 1
#include #include using namespace std;

const int n = 100010;

int n, m, x;

int a[n], b[n];

int main()

}return 0;

}

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

還是雙指標。暴力解法複雜度為o n 2 找到單調性後可以降到o n m 暴力解法 對於每個a陣列的元素,遍歷每個b陣列的元素,檢視是否和為目標值。由於陣列有序,所以可以找到規律。單調性解法 如果a的某個元素和b的某個元素加起來剛好大於x,b元素再往前挪就小於x了。此時,如果a的元素向後移動,和該b元...

基礎演算法 陣列配對

description 陣列配對任務描述 給你乙個長度為n的陣列a和乙個正整數k,問從陣列中任選兩個數使其和是k的倍數,有多少種選法對於陣列a1 1,a2 2,a3 2而言 a1,a2 和 a2,a1 被認為是同一種選法 input 輸入n,k,n 1000000,k 1000,第二行有n個整數,大...

演算法 陣列和視窗 陣列

給定乙個整型陣列arr和乙個大小為w的視窗,視窗從陣列最左邊滑動到最右邊,每次向右滑動乙個位置,求出每一次滑動時視窗內最大元素的和。輸入第一行為用例個數,每個測試用例輸入的第一行為陣列,每乙個元素使用空格隔開 第二行為視窗大小。輸出每個測試用例結果。14 3 5 4 3 3 6 7 3 陣列與視窗 ...