二分查找法
题目来源:
704.二分查找 https://leetcode.cn/problems/binary-search/
题目:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
代码如下:
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:42.1 MB, 在所有 Java 提交中击败了49.01% 的用户
通过测试用例:47 / 47
class Solution {
public int search(int[] nums, int target) {
if(nums.length==0){
return -1;
}
int first = 0;
int mid = nums.length/2;
int last = nums.length-1;
if(nums[0]==target){
return 0;
}
if(nums[nums.length-1]==target){
return nums.length-1;
}
while(true){
if(nums[mid]==target){
return mid;
}
else if(nums[mid]>target){
last = mid;
mid = (last + first) / 2;
}
else if(nums[mid]<target){
first = mid;
mid = (last + first) / 2;
}
if(mid==first){
return -1;
}
}
}
}
二分查找法原理:
假设1-100范围内让你猜一个数,你难道是从1开始默默数到100?如果是1还好,一下就猜中了,如果是100呢,等你数完天都黑了,所以啊,我们不如从50猜起来,如果大了就猜1-50之间的25,小了就猜50-100之间的75,以此类推。二叉搜索树,也是这种原理