数组元素的目标和
感觉这类题目还是很常见的。在leetcode就刷到过,两个数组 求a[i] + b[j] == 给定的元素。
做法也是一样的。首先对两个数组排序 sort(n log n )。
然后就是我们的双指针算法,(和y总模版一摸一样hhh)
j是单调不断减小的因此o(n**2)的复杂度就变成了 o(n)
j单调不断减小是因为 ,我们从大到小去便利数组b[i]。
#include <iostream>
using namespace std ;
int n , m , x ; const int N = 1e5+100 ;
int a[N] , b[N] ;
int main(){
ios::sync_with_stdio(false) ;
cin >> n >> m >> x ;
for(int i = 0 ; i < n ; i++) cin >>a[i] ;
for(int i = 0 ; i < m ; i++) cin >>b[i] ;
int i , j ;
for(i = 0 , j = m-1 ; i <n ; i++){
while(a[i] + b[j] > x) j-- ;
if(a[i]+b[j] == x) break ;
}
cout<<i<<" "<< j <<endl;
return 0 ;
}