代码随想录算法训练营day1

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。

704.二分查找 题目链接:leetcode704 Binary search

暴力解法

class Solution {
public:
    int search(vector<int>& nums, int target) {
           for(int i=0;i<nums.size();i++)
           {
               if(nums[i]==target)
               {
                   return i;
               }
               
           }
           return -1;
    }
};

这里就是一个for循环来遍历数组然后找出是否存在条件。
Tips:nums.size() 求数组长度,然后我也见过nums.size()-1, 忘了这是啥了。(看到后面就想起来了是为了注意边界然后减1)

二分法:二分法使用条件:1.有序数组,2.无重复
二分法同时涉及了很多关于边界的条件,因此区间分为两种左闭右闭[left,right]和左闭右开[left,right)

第一种边界为[left,right]:

class Solution{
public:
int search(vector<int>& nums,int target)
{
int left=0,right=nums.size()-1;//在这里因为取到的区间为左闭右闭所以可以取到;
while(left<=right)
{int mid=left+((right-left)/2);//防止溢出
if(nums[mid]<target)
{left=mid+1;}//target 在右区间所以是[mid+1,right]
else if(nums[mid]>target)
{right=mid-1;}// same
else return mid;}
return -1;
}
};

第二种边界为[left,right)

class Solution{
public:
int search(vector<int>& nums,int target)
{
int left=0,right=nums.size();
while(left<right)
{int mid=left+((right-left)>>1);//>>1 向右移位,对整数来说等于除2,好像是更快
if(nums[mid]<target)
{left=mid+1;}
else if(nums[mid]>target)
{right=mid;}
else return mid;}
return -1;
}
};

Tips:二分法比较基础,感觉比较重要的是的是以下几点

  1. 区间范围,[left,right] [left,right)
  2. 溢出问题 mid=left+((right-left)/2)

27.移除元素题目链接 leetcode 27 remove element

暴力解法

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;

    }
};

双指针法

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
    int slowindex=0;
    for(int fastindex=0;fastindex<nums.size();fastindex++)
    {
        if(val!=nums[fastindex]){
            nums[slowindex++]=nums[fastindex];
        }
    }
    return slowindex;
    }
};

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置

当条件一致时慢指针跟随快指针动。

你可能感兴趣的:(c++)