1. Leetcode 704二分查找
(1)解析
(2)思路
左闭右闭,while判断条件(left <= right), left = middle + 1, right = middle - 1
(3)代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
int middle = -1;
while(left <= right)
{
middle = (left + right)/2;
if(nums[middle] == target)
return middle;
if(nums[middle] < target)
{
left = middle + 1;
}
else
{
right = middle - 1;
}
}
return -1;
}
};
(4)总结
二分法查找可采用两种方法:
(4.1) 左闭右闭:length = vec.size() -1; while(left <= right); left = middle + 1, right = middle - 1
(4.2)左闭右开:length = vec.size(); while(left < right); left = middle + 1, right = middle
2. Leetcode27 移除元素
(1)解析
(2)思路
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置
(3)代码
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0, fast = 0;
for(; fast != nums.size(); ++fast)
{
if(nums[fast] != val)
{
if(slow < fast)
{
nums[slow] = nums[fast];
}
++slow;
}
}
return slow;
}
};
(4)总结
二分法的扩展