本文主要是介绍【打卡第185道】【链表】【leetCode高频】:704. 二分查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
2、算法分析
数据结构与算法中比较经典的一道算法。二分查找。
注意:二分查找是要求序列是有序的。
二分,就是从中间分,而从中间分必然这个中间需要首尾的坐标才能找到中间坐标。
所以:
low = 0;high = nums.length - 1
中间坐标:mid = low + (high - low) / 2
搜索:
while(low <= high),这儿是等于因为序列中可能是一个元素呢
接下来就是找:
if(nums[mid] == target):直接返回坐标
if(nums[mid] > target) :说明target在[0,mid-1]这个区间内,所以high = mid - 1
比如:1234567,target = 2,nums[mid] = 4
if(nums[mid] < target):说明target在[mid+1,nums.length-1]这个区间内,所以low = mid + 1
比如:1234567,target = 6,nums[mid] = 4
找到值就返回下标,找不到返回-1
3、代码实现
class Solution {public int search(int[] nums, int target) {int low = 0;int high = nums.length - 1;while(low <= high){int mid = low + (high - low) / 2;if(nums[mid] == target){return mid;}else if(nums[mid] > target){high = mid - 1;}else{low = mid + 1;}}return -1;}
}
这篇关于【打卡第185道】【链表】【leetCode高频】:704. 二分查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!