704.二分查找
题目链接:https://leetcode.cn/problems/binary-search/
文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715
左闭右闭:(low 和 high 的值都能取到—>初始值如何设置、while循环条件、low和high更新后的位置)
class Solution {
public:
int search(vector<int>& nums, int target) {
if(target < nums[0] || target>nums[nums.size()-1])
return -1;
int low,mid,high;
high = nums.size()-1;
low=0;
while(low<=high)
{
mid = (low+high)/2;
if(nums[mid]==target)
return mid;
else if(nums[mid]<target)
low = mid+1;
else
high = mid-1;
}
return -1;
}
};
左闭右开:(low 的值能取到,high取不到—>初始值如何设置、while循环条件、low和high更新后的位置)
class Solution {
public:
int search(vector<int>& nums, int target) {
if(target < nums[0] || target>nums[nums.size()-1])
return -1;
int low,mid,high;
high = nums.size();
low=0;
while(low<high)
{
mid = (low+high)/2;
if(nums[mid]<target)
low = mid+1;
else if(nums[mid]>target)
high = mid;
else
return mid;
}
return -1;
}
};
35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置——没时间做了。
27.移除元素
题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
双指针法(快慢指针),留下的一点记忆目前还够自己写出来。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow,fast;
slow = 0;
fast = 0;
while(fast<nums.size())
{
if(nums[fast]!=val)
nums[slow++] = nums[fast];
fast++;
}
return slow;
}
};
标准双指针(参考答案)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowIndex=0;
for(int fastIndex = 0; fastIndex < nums.size(); fastIndex++)
{
if(nums[fastIndex]!=val)
nums[slowIndex++]=nums[fastIndex];
}
return slowIndex;
}
};
暴力解法:双重循环,每检测到一个目标值,就遍历剩余元素前移一位。(令j=i+1,好判断是否越界)。注意i完成覆盖之后要自动+1,所以在每一轮最后数组规模要减去一个被覆盖的,i也要减一。
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];
size--;
i--;
}
}
return size;
}
};
好久没写编程题,最简单的数组也回忆了一下,一看讲解视频非常熟悉啊,慢慢开始。
C++比较熟,java后期再开始复习,还是先用C++刷题啦。