美文网首页
[细节] 数组某部分的中间位置的索引

[细节] 数组某部分的中间位置的索引

作者: CoderJed | 来源:发表于2018-09-21 16:18 被阅读0次

给定一个数组的某个部分,这部分起始索引为L,结束索引为R,求这部分中间位置的索引。

1. int mid = (L + R) / 2

这个公式在数学上没有任何错误,通过这样的方式得到的mid值一定是L和R的中间值,但是在计算机中可能会造成数值越界的问题,如果L接近Integer.MAX_VALUE,R也接近Integer.MAX_VALUE,那么(L + R)将会越界,返回一个不正确的值,例如:

public static void main(String[] args) {

    int i1 = Integer.MAX_VALUE - 10;
    int i2 = Integer.MAX_VALUE - 20;
    int i3 = i1 + i2;
    
    System.out.println(i3);  // 结果是-32
}

虽然我们不会定义一个那么长的数组,但为了程序的绝对正确性,这个求中间索引的方法需要改进,就是下面的第二种方法。

2. int mid = L + (R - L) / 2

这种方法就避免了在计算机中的值越界问题,但还可以改进,看下面的第三种方法。

3. int mid = L + ((R - L) >> 1)

在计算机中,移位运算是要比算术运算的效率高的,我们知道,一个数右移一位的结果与这个数除以2的结果是相同的(关于位运算的详细介绍可以参考图解JAVA位运算),所以这样把除以2改为右移一位来提高运行效率。

相关文章

  • [细节] 数组某部分的中间位置的索引

    给定一个数组的某个部分,这部分起始索引为L,结束索引为R,求这部分中间位置的索引。 1. int mid = (L...

  • 数组处理--使用vue处理

    数组追加 首端添加 插入到中间某位置 删除某位置元素 替换数组某元素 过滤器 数据转换 聚合函数

  • PHP编程指南(六)数组

    索引数组 定义 方式一: 方式二: 获取指定索引位置上的值: 遍历索引数组 索引数组的长度 通过count()函数...

  • 浅析HashMap

    基于数组的ArrayList长于按索引获取对应元素,而在中间位置插入和删除元素,都涉及了对数组整体的移动、复制等操...

  • Where do I belong(数组排序并找出元素索引)

    数组排序并找出元素索引 我身在何处? 先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。 举例:...

  • 数组排序并找出元素索引

    数组排序并找出元素索引 我身在何处? 先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。 举例:...

  • FCC-JS-BAS-Where do I belong-数组排

    数组排序并找出元素索引 我身在何处? 先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。 举例:...

  • mongodb

    完全的索引支持 单键索引,多键索引,数组索引,全文索引,地理位置索引。

  • 数组逆序

    数组逆序: 数组中的元素进行,位置上的交换 逆序实现思想:数组最远端位置交换 数组的指针思想:就是数组的索引 大指...

  • JavaScript数组的indexOf方法与封装

    这个方法是数组对象用于检测元素在数组中的索引位置 参数:target,startIndex (起始索引,目标) 返...

网友评论

      本文标题:[细节] 数组某部分的中间位置的索引

      本文链接:https://www.haomeiwen.com/subject/wgfznftx.html