代码随想录训练营第一天任务--数组part1

数组理论基础,704. 二分查找,27. 移除元素

数组基本知识的学习

 首先数组的定义就是一类相同元素的集合,其在计算机中的储存空间的地址是连续的,我自己使用的c++是这样的,有些语言比如java的二维数组就是不连续的。

查找数组一指定元素时的方法:二分法

要求数组是有序且无重复元素。

主要学习了其两种边界如何进行处理,分别是在[left,right]和[left,right)进行二分查找,两种主要的不同就是循环的条件[left,right]中left可以==right所以其while循环的条件是(left<=right),[left,right)中不存在left==right的情况,所以其while循环的条件是(left<while)。

[left,right]中,middle=left+(right-left)>>1防止溢出,重新确立边界是因为其left,right两边都为闭,最后都会查找到,所以left=middle+1,right=middle-1。

[left,right)中,middle=left+(right-left)>>1防止溢出,重新确立边界是因为其left为闭,right为开,最后为保证right查找到,所以left=middle+1,right=middle。

代码都省略了,就只要知道其边界的不同如何改变边界就行。

删除数组中的元素

题目是力扣.27的题目力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目介绍省略

一种是暴力写法和双指针。

暴力解法是两次遍历数组,第一次遍历发现要删除的元素,第二次就是整个数组向右移。

双指针解法就是采用一个快指针和一个慢指针同时遍历数组,快指针没发现要删除的元素,将快指针指向的元素赋给慢指针指向元素,同时将慢指针指向下一元素,如果发现了,慢指针不动,这个过程中,快指针一直向右移动,慢指针根据快指针只想元素的值判断是否向右移动。最后返回慢指针的值就可,题目不要求对数组后面的值进行操作,如果进行操作也很简单,全部赋值0即可。

class Solution {

public:

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

    int slowIndex=0;

    for(int fastIndex=0;fastIndex<nums.size();fastIndex++)

    {

        if(nums[fastIndex]!=val)

        nums[slowIndex++]=nums[fastIndex];

    }

    return slowIndex;

    }

};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值