一个星期前才刚开始看b站上王卓老师的数据结构,今天算是第一次写LeetCode题目,希望能坚持下去
704. 二分查找
题目链接:力扣
二分查找是最基础的题目,很早很早之前接触过二分法,但是今天写的时候还是想不起来这玩意的思想是什么。另外说一句,王卓老师的数据结构目前才看到第七周的课,所以又花时间去第十几周看了这个。
主要思想就是:
两个指针,分列左右,求出中间的middle,让middle与val对比
如果middle大,右指针移动
如果middle小,左指针移动
相等,输出
需要注意不同类型区间的写法有所不同
左闭右闭区间
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while(left <= right){
int mid = (right - left) / 2 + left;
int num = nums[mid];
if (num == target) {
return mid;
} else if (num > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
};
左闭右开区间
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size();
while(left < right){
int mid = ((right - left) >>1) + left;
int num = nums[mid];
if (num == target) {
return mid;
} else if (num > target) {
right = mid;
} else {
left = mid + 1;
}
}
return -1;
}
};
二分法没什么难度,估计第一个出这个题目一也是为了让我们找找信心
27. 移除元素
移除元素的暴力解法
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
for(int i = 0; i < size; i++)
{
if(nums[i] == val)
{
for(int j = i+1; j< size; j++)
{
nums[j-1] = nums[j];
}
i--;
size--;
}
}
return size;
}
};
没什么好说的,需要注意i--,因为数据都向前移了,所以前面的元素要退回去
双指针法
双指针就是快慢指针,以快指针fastIndex与val比对为条件,判断,fastIndex要不要等一等slowIndex