> 自然
二分查找又叫什么(二分查找怎么理解)
导语:「每日一题」二分查找
题目:
给定一个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.
本文内容由小涵整理编辑!