陣列元素的目標和(雙指標 or 二分)

2021-10-03 03:18:28 字數 1289 閱讀 5488

給定兩個公升序排序的有序陣列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 11.二分 時間複雜度o(nlogn)

要想判斷另乙個陣列中是否存在與該數相加為x的值,只需要在另乙個陣列中查詢是否存在x-a[i],即可。

ac**:

#include

#include

#define ios ios::sync_with_stdio(false)

using

namespace std;

const

int maxn=

1e6+10;

int a[maxn]

,b[maxn]

,n,m,x;

bool

search

(int

&l,int

&r,int x)

return b[l]

==x;

}int

main()

}

2.雙指標 時間複雜度o(n)

由於陣列是有序陣列,所以對於b陣列,我們只用從尾部開始遍歷,如果兩數之和相加大於x,則讓指向另乙個陣列的指標向前移一位,迴圈停止,說明a[i]+b[j]<=x,而因為是有序陣列,對於對於當前的a[i]來說,以後的都是大於等於a[i]的,所以a[i]後面的數字一定存在a[i]+b[j]=x。

ac**:

#include

#include

#define ios ios::sync_with_stdio(false)

using

namespace std;

const

int maxn=

1e6+10;

int a[maxn]

,b[maxn]

,n,m,x;

intmain()

}

陣列元素的目標和 雙指標

題目描述 給定兩個公升序排序的有序陣列a和b,以及乙個目標值x。陣列下標從0開始。請你求出滿足a i b j x的數對 i,j 資料保證有唯一解。輸入格式 第一行包含三個整數n,m,x,分別表示a的長度,b的長度以及目標值x。第二行包含n個整數,表示陣列a。第三行包含m個整數,表示陣列b。輸出格式 ...

二分查詢目標元素索引

package com.zhangry.search public class binarysearch int start 0 int end arrayforsearch.length 1 int target 3 system.out.println target 在此陣列中的索引為 bina...

String Game (二分 桶 雙指標)

題目鏈結 題意 給乙個長為len的字串str1和乙個長度不超過str1的字串str2,以及乙個操作序列,每個操作a i 代表刪去str1中的第a i 個字元。問操作最多進行到第幾步,str2不再是str1的子串行?刪去某字元後後str1剩餘字元的下標保持不變。保證最初的str2是str1的子串行 通...