算法练习Day1 二分法与快慢指针
//左闭右闭的情况,也是我最喜欢的一种写法,可能是因为比较对称 一个mid+1 一个mid—1 直接写就行,要注意左闭右闭和左闭右开的区别
class Solution {
public:
int search(vector<int>& nums, int target) {
int l=0;
int r = nums.size()-1;
while(l<=r){
int mid = l+((r-l)>>1); //注意这里要多加个括号,不然不知道为啥超时无法通过
if(target<nums[mid]){
r=mid-1;
}else if(target>nums[mid]){
l=mid+1;
}else {
return mid;
}
}
return -1;
}
};
//左闭右开的想法,好好想一下为什么是l<r时以及为什么r直接=mid
class Solution {
public:
int search(vector<int>& nums, int target) {
int l=0;
int r = nums.size();
while(l<r){
int mid = l+((r-l)>>1);
if(target<nums[mid]){
r=mid;
}else if(target>nums[mid]){
l=mid+1;
}else {
return mid;
}
}
return -1;
}
};
//双指针的使用十分十分常见,比如判断链表是否有环,龟兔赛跑,找中点等等,随便写写就行。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowpivot=0;
for(int fastpivot=0;fastpivot<nums.size();fastpivot++){
if(nums[fastpivot]!=val){
nums[slowpivot++]=nums[fastpivot];
}
}
return slowpivot;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!