代码随想录算法训练营12期DAY1

力扣704.二分查找

易错点:

 二分查找一定要注意while中是<还是<=; if(target<nums[middle]),right是等于middle-1还是middle
 这涉及到二分查找有两种书写模式:左闭右闭和左闭右开(左开右闭其实也有,只是没人那么写)
 如果选择了左闭右闭,那么书写代码的时候要贯彻始终,while中要写成<=才能代表区间的左闭右闭。又因为右端点是闭合的,所以当middle的值不等于target值的时候,我们下一段区间中不需要出现middle了,所以right就等于middle-1就行。
 如果选择了左闭右开,那么书写代码的时候也要贯彻始终,while中要写成<才能代表左闭右开的右开!因为右端点是开的,所以等middle的值不等于target时,我们取right=middle,但是实际上这个middle的值不会被包含在新区间内。

左闭右闭:

 int search(int* nums, int numsSize, int target){
     int left=0;
     int right=numsSize-1;
     while(left<=right){
         int middle=(left+right)/2;
         if(target<nums[middle]){
             right=middle-1;
         }
         else if(target>nums[middle]){
             left=middle+1;
         }
         else if(target==nums[middle])
             return middle;
     }
     return -1;
 }

左闭右开:

 int search(int* nums, int numsSize, int target){
 int left=0;
 int right=numsSize;//因为区间取右开,所以right直接等于numsSize就行,因为这个值不会被算在我们的区间内。
 while(left<right)//左闭右开
 {
     int middle=(right+left)/2;
     if(nums[middle]<target)
     {
         left=middle+1;
     }
     else if(nums[middle]>target)
     {
         right=middle;
     }
     else if(target==nums[middle])
     {
         return middle;
     }
 }
 return -1;
 }

力扣27.移除元素

题目:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

 int removeElement(int* nums, int numsSize, int val){
  int slow=0;
  for(int fast=0;fast<numsSize;fast++)
  {
      if(nums[fast]!=val)
      {
          nums[slow++]=nums[fast];
      }
 ​
  }
  return slow;
 }

空间复杂度:空间复杂度分析 | 代码随想录 (programmercarl.com)

O(1)的空间复杂度就是不要开辟任何的额外空间。

O(n)空间复杂度就是一个数组的空间复杂度

空间复杂度是logn的情况确实有些特殊,其实是在递归的时候,会出现空间复杂度为logn的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值