代码随想录算法训练营day1

1.1二分查找

题目要求:

思路:1.使用线性查找法逐个元素进行比较(不推荐)2.使用二分查找法

概念普及:二分查找法是定义一个区间,通过目标值与中间索引位置元素的大小进行比较,根据比较的结果,不断缩小区间的大小,进而找到目标值

难点:区间左闭右开、左闭右闭中的区间更新的细节把控(注意:前提条件:数组必须是有序的)

第一种实现方法:左闭右闭

 需要注意 的细节:1.int mid = lef + (right - left)/2 是为了防止(right+left)/2造成溢出.2.循环条件之所以是<=是因为当left=right时满足区间的定义,及左右区间都可以取到 3 进行if判断后,mid是否加1还是取决于区间的定义,即左右边界都可以取到

第二种实现方法:左闭右开

 细节:1 因为是左闭右开,所以一开始的右边界取得是数组的长度 2 进行if判断后同样是根据区间的定义(右边界取不到)来决定是否加1

1.2 移除元素

1.2.1 数组的理论基础

一维数组创建后的大小是不会发生变化的,只是数组中的元素个数发生了变化,移除某个索引上的元素只是覆盖,并不能真正的删除。该索引后的元素需要整体向左移动

1.2.2 暴力解法(时间复杂度为o(n^2))

外层for循环负责遍历整个数组,找到想要删除的元素

内层for循环负责将该索引之后的元素整体前移

细节:当元素整体前移时,该索引(i)必须减1,这样经过外层for循环后的自增操作后,才能保证当前索引值不变,以便比较移动到该位置的元素是否和目标值相同 

1.2.2 双指针解法

思路:fast指针循环遍历整个元素,low指针表示新建元素的索引位置。初始值都为0,当fast指针所指元素!= 目标值时,arr_new[low++] = arr[fast],当fast指针遍历完整个数组时,low指针所指向的索引值就是删除元素后的数组长度。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值