算法练习Day1 二分法与快慢指针

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;
  }
};
 

 

posted @   Fancele  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示