代码训练营第一天

数组基础

1 数组是存放在连续内存空间上的相同类型数据的集合

   

注意:

1 数组下标从0开始

2  数据内存地址空间是连续的 (二维也一样)

数组的元素不能删只能覆盖

二分查找:

前提:

1元素可以重复  但结果不唯一 要去看要哪一边

2数组升序或降序

class Solution {

public:

    int search(vector<int>& nums, int target) {

        int left =0,right=nums.size()-1,mid;

        

        

        while(left<=right){

            mid=(left+right)/2;

        if(nums[mid]==target){

            return mid;

        }

        else if(target>nums[mid]){

            left=mid+1;

        }

        else{

            right=mid-1;

        }

        }

        return -1;

    }

};

非常简单的小题 之前做过 一遍过。

移除指针:

注意1

函数类型是int 所以不能return false, 应该return 0

2 fast 要小于nums.size() 而不是小于等于 因为数组编号是从0开始的

还是没有搞清楚双指针的概念 应该是fast移动而slow先不动 而不是fast移动而slow不动 思维问题 没有想到位。

class Solution {

public:

    int removeElement(vector<int>& nums, int val) {

        int slow=0,n=0,fast=0;

   

        for(;fast<nums.size();fast++){

            if(nums[fast]!=val){

                nums[slow]=nums[fast];

                slow++;

            }

           

        }

         return slow;

    }

};

感觉很神奇 就是这个双指针的办法 非常的巧妙 就是用本数组当作新的数组 而不是我一开始想的先验证slow是不是要删除的 如果slow要删除就再去用fast指针去判断 看看fast要不要删除 ,然后最后再赋值 这样代码很复杂 因为我没有理解到位fast指针和slow指针的作用 用了slow指针当作fast指针 导致代码臃肿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值