搜索
写经验 领红包
 > 自然

二分查找又叫什么(二分查找怎么理解)

导语:「每日一题」二分查找

二分查找又叫什么(二分查找怎么理解)

题目:

给定一个n个元素有序(升序)的整型数组nums,和一个目标值target,写一个函数搜索nums中的target,如果目标值存在,返回下标,否则返回 -1

解题(Java):

class Solution {    public int search(int[] nums, int target) {        int firstIndex = 0;        int lastIndex = nums.length - 1;                while(firstIndex <= lastIndex){            int index = (lastIndex + firstIndex ) / 2;            int num  = nums[index];            if(target == num){                return index;            }else if(target > num){                //取后半部分较大的值                firstIndex = index + 1;            }else {                //取前半部分较小的值                lastIndex = index - 1;            }        }        return -1;    }}

思路解析:

题目规定数组为有序且不存在重复元素,这就符合了二分查找的前提(在工作中可以注意存在这种情况可以考虑二分查找) 二分查找逻辑简单,主要考虑的就是边界问题1、什么时候需要停止对数组的分割?其中一种思路是左边界大于右边界的时候。所以上面解题代码while中写的是first <= last2、边界的转移问题:如果目标值大于数组选中的值,则说明目标值存在于右半部分,则需要挪动左边界下标,即firstIndex,需要把当前二分的下标index赋值给firstIndex,但这里为什么要+1呢,很简单,因为index这个值已经比较过了,所以firstIndex应该再次向右移动一位,同理如果目标值小与数组选中的值,说明目标值存在左半部分,即需要lastIndex = index - 1.

本文内容由小涵整理编辑!