今日小提醒,以后都有C++的头文件:
#include <iostream>
#include <c.stdio>
using namespace std;
查找
线性查找O(n)
略
二分查找O(logn)
分为:
- 自定义
注意查找前应该保证数组有序
#include <algorithm>
sort(arr,arr+n);
//arr为全局变量
bool BinarySearch(int n,int target){
int left = 0;
int right = n - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(arr[mid] > target){
right = mid - 1;
}else if(arr[mid] < target){
left = mid + 1;
}else{
return true;
}
}
return false;
}
-
系统自带
-
如果没有这个值但有比这个值更大的值:
-
如果没有这个值而且无比这个值更大的值:
返回n
int position = lower_bound(arr,arr + n,target) - arr;
//注意lower_bound函数返回的是地址,如何得到下标:减去首地址
if(position != n && arr[position] == target){
//找到
}else{
//没找到
}```
## 散列查找O(1)
- 自定义
略
- 系统自带
unordered_map
# zongjie![在这里插入图片描述](https://img-blog.csdnimg.cn/20210119173841621.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzM3ODU5NA==,size_16,color_FFFFFF,t_70)