給定兩個公升序排序的有序陣列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的子串行 通...