fighting算法002#有序数组二分查找

Posted 程序员方子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fighting算法002#有序数组二分查找相关的知识,希望对你有一定的参考价值。

二分查找

二分查找又叫做折半查找,其查找过程为:先确定待查记录所在的范围(区间),然后逐步缩小范围知道找到或者找不到该记录为止。注意二分查找是在有序表上进行的,且二分查找也是分治思想的例证。

题目:已知有序数组a= {1, 2, 3, 4, 5,9,11},查找某个值,若存在,返回数组下标,若不存在,则返回-1。

例如输入:4,返回3


思路:

     * 双指针法  while  low小于等于high时

     * 求出中间坐标 midIndex=(low +high)/2

     * 然后比较目标值与中间坐标的值

     * 如果目标值大 则说明需要查找的值在mid的右侧, low =midIndex+1

     * 如果目标值小 则说明需要查找的值在mid的左侧, high=midIndex-1

     * 如果相等则返回midIndex

时间复杂度O(logn)

空间复杂度O(1)


 public int find(int[] a, int target) {        int low = 0; int high = a.length - 1; while (low <= high) { int midIndex = (low + high) / 2; if (target == a[midIndex]) { return midIndex; } else if (target > a[midIndex]) { low = midIndex + 1; } else if (target < a[midIndex]) { high = midIndex - 1; } } return -1; }


二分查找的应用

LeetCode 704. 二分查找 (Binary Search)

题目描述

统计一个数字在排序数组中出现的次数。

例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。

示例

示例 1:

输入:[1, 2, 3, 3, 3, 3, 4, 5] ,  3

输出:4 解释:数组中总共有4个3


题解参考:https://mp.weixin.qq.com/s/mOCelQ6nzuGTzb4aFihQBw


以上是关于fighting算法002#有序数组二分查找的主要内容,如果未能解决你的问题,请参考以下文章

经典算法之二分查找:编写代码在一个整形有序数组中查找具体的某个数 找到了就打印数字所在的下标,找不到则输出:找不到。

C语言二分查找算法,折半查找算法

有/无重复二分查找,矩阵查找,有序数组中位数,接雨水算法

一个递归方法,实现有序数组的二分查找算法

数据结构和算法三个“二分查找”练习

简单实用算法——二分查找法(BinarySearch)