Skip to content

Latest commit

 

History

History

array_study

README.md

什么是数组

参考链接: https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

数组可以这样的简单理解:存储在内存空间里,连续的,相同数据类型的数据集合

数组的特性

  1. 数组在内存里是一个连续的空间
  2. 通过下标可以快速的检索到其对应的数据,在python 中,list 虽然不是数组,但是也可以这样理解
  3. 一般下标从 0 开始

二分法查找

条件

有序(升序或者降序),元素不相同,有限,查找指定的值

二分法的方法就是,把数组分成两份 ,如果查找的值在左边那份,那么就把 left 和 right 重新定义到左边,然后重新查找,直到找到我们需要匹配的值,反之亦然

那么这个算法的难点就在于我们如何定义边界,边界值如果不处理好很容易陷入死循环

那么如何确定好边界值呢,就是判断 while 在什么时候有意义

我们先初始化指针 i=0 和 j=n−1 ,分别指向数组首元素和尾元素,代表搜索区间 [0,n−1] 。请注意,中括号表示闭区间,其包含边界值本身。

接下来,循环执行以下两步。

  1. 计算中点索引 m=⌊(i+j)/2⌋ ,其中 ⌊⌋ 表示向下取整操作。
  2. 判断nums[m]和target 的大小关系,分为以下三种情况。
    1. 当 nums[m] < target 时,说明 target 在区间 [m+1,j] 中,因此执行 i=m+1 。
    2. 当 nums[m] > target 时,说明 target 在区间 [i,m−1] 中,因此执行 j=m−1 。
    3. 当 nums[m] = target 时,说明找到 target ,因此返回索引 m 。

若数组不包含目标元素,搜索区间最终会缩小为空。此时返回 −1 。