前言:【双指针】是通过两个变量交替相向/相对移动完成任务的算法,在数组、链表相关问题上频频出现。下面,让我们逐步看清双指针

破解索引:
1.什么是双指针?⋙
不少C/C++选手初看到“双指针”这三字常常会心生疑惑,尤其是C选手,初见时,往往会不经意联想到二级指针。
而这里的双指针和“指针”不是同一回事,这里的双指针或许叫做“双下标”、“双索引”更适合。
双指针是通过通过两个变量交替相向/相对移动求解问题的算法,具体可分为【1️⃣左右指针,相对移动】和【2️⃣快慢指针,同向移动】
下面具体来看这两种双指针的使用技巧
2.左右(对撞)指针常用技巧⋙
左、右指针一般用在数组问题里面,实际上指的是两个索引值,一般初始化为left=0,right=arr.size()-1
【1】二分搜索
下面来看最简单的二分搜索模板👇
nt binarySearch(vector<int>& nums, int target){
if(nums.size() == 0)
return -1;
int left = 0, right = nums.size() - 1;
while(left <= right){
// 防止(left + right) 溢出👇
int mid = left + (right - left) / 2;
if(nums[mid] == target){
return mid; }
else if(nums[mid] < target) {
left = mid + 1; }
else {
right = mid - 1; }
}
// 结束条件: left > right
return

4462

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



