两数之和
思路
使用map映射效率较高
分治思想
- 对数组进行排序
- 顺序遍历数组,将当前元素与目标值的差值作为target,针对target在数组中进行二分查找,时间复杂度为O(nlogn)
二分查找
- 划分:对原数组进行划分,当划分得到一个元素时,可以直接进行比较
- 求解:target和mid进行比较,比mid小则在数组左半部分查询,比mid大则在数组右半部分查询
- 合并:只是查找target是否存在,无需合并操作
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, S;
vector<ll> arr;
//快排
int randPartition(int left, int right){
int p = (int)round(1.0 * rand() / RAND_MAX * (right - left) + left);
swap(arr[p], arr[left]);
int temp = arr[left];