一、基本概念
查找问题一般解决的是 在某个数组中查找某个特定元素,方法包括 顺序查找、二分查找和哈希查找。
1.1. 顺序查找
顺序查找的在于 暴力遍历 和 排序后查找。
二维数组中的查找
1.2. 二分查找
二分查找需要先排序,排序之后可以利用如下框架。该框架比较好理解,因为搜索区间为闭区间,即每个元素都必能搜索到,因此非常好记忆。
while(left<=right)
{
mid=(left+right)/2;
if(nums[mid]>target)
{
right=mid-1;
}
else if(nums[mid]<target)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
- 排序数组中查找元素第一个和最后的位置
例如[5,7,7,8,8,10],target=8则返回[3,4]
思路:由于上述框架能够查找所有的元素,因此用两次二分查找分别搜索元素为target的最小下标和最大下标即可。
1.3. 哈希查找
可借助哈希表进行查找。
注意无论是map还是set均使用 .count(x) 检测是否记录元素x
map<int,int> m;
unordered_set<int> us;
m[0] = 10;
us.insert(20);
cout << m.count(1) << " " << m.count(0) << endl;
cout << us.count(20) << " " << us.count(200) << endl;
输出:
0 1
1 0
本文深入探讨了三种核心查找算法:顺序查找、二分查找及哈希查找,详细解析了每种算法的工作原理与应用场景,特别介绍了如何在排序数组中利用二分查找定位目标元素的首个与末个位置。
2659

被折叠的 条评论
为什么被折叠?



