代码随想录 跟随日记

本文介绍了数组的基本性质,包括它作为相同数据类型集合的特性以及内存空间的连续性。接着详细讲解了二分查找算法,包括区间定义、边界处理和优化写法,并列举了相关编程题。此外,文章还讨论了如何使用双指针法在数组中移除元素,强调了慢指针和快指针的角色与移动策略。
摘要由CSDN通过智能技术生成

目录

数组array

基本性质

二分查找

移除元素


数组array

基本性质

1 相同数据类型的集合

2 内存空间地址连续,存放在连续内存空间

3 下标从0开始

二分查找

对应力扣题目

关键问题:

1 区间的定义,循环过程中边界的处理

2 中间间隔奇数个数字时候,(left+right)/2 指针偏左,(left+right)/2 指针偏右

左闭右闭的写法比单边闭合要简单明了

写法一:(左闭右闭)while(left<=right)

int left=0;
int right=nums.size()-1;
while(left<=right)
{
    int middle=(left+right)/2;#指针偏左
    if(nums[middle]>target)
    {
        right=middle-1;#未取等,越过middle
    }
    else if(nums[middle]<target)
    {
        left=middle+1;
    }
    else{
        return middle;
    }
}
return -1;#未找到目标值

相关题目:

35.搜索插入位置

34.在排序数组中查找元素的第一个和最后一个位置

69.x 的平方根

367.有效的完全平方数

移除元素

双指针法(快慢指针):在数组和链表的操作中非常常见

思路:一个从0开始的慢指针,作用是在停留在没有出现过要删除的元素之前的位置之前(例如位置n处),用来将快指针探索到的要删除元素之后的第一个元素移动到n+1处。总之,快指针用来寻找要移动的元素及位置,慢指针为要移动的元素保留位置

产生移动的条件:快指针探寻到与target相等的元素,否则慢指针不执行任何移动,快指针正常移动。

也就是说,快指针的移动不是重点(因为快指针每次都要往后走一步),重点是慢指针的移动条件(当快指针的位置不等于target),这也是为什么代码中判断条件是要判断快指针是否与target相等,因为这恰恰是慢指针移动的条件。

int slowIndex=0;#慢指针,用来保留/停留要移动的位置
while(int fastIndex=0;fastIndex++;fastIndex<nums.size()) #快指针,每次都在数组中移动,用来寻找需要移动的元素
{
    if(nums[fastIndex]!=target)#
    {
        nums[slowIndex++]==nums[fastIndex];#先执行赋值
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值