题解 | 二分查找-I
二分查找-I
https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
// write code here
// 提前筛选优化
if(nums == null || nums.length == 0) return -1;
if(nums.length == 1) return nums[0] == target ? 0 : -1;
int left = 0, right = nums.length - 1;
// 只有包含两个元素或以上才会进入循环
while(left < right){
// 获取中间元素
int mid = (left + right) / 2;
if(nums[mid] > target){
// 如果中间的元素大于目标值,说明目标值在左区间,右边区间抛弃
right = mid;
} else if (nums[mid] < target){
// 如果中间的元素小于目标值,说明目标值在右区间,左边区间抛弃
left = mid;
} else {
// 找到元素就直接返回下标
return mid;
}
// 当right - left == 1,也就是相邻的时候,mid不会更新,所以会导致死循环,这里需要特别分析
if(right - left == 1){
// 当right - left == 1,说明mid等于right或者left,直接再比较两个元素中是否有个target相等的值即可
if(nums[right] == target) return right;
if(nums[left] == target) return left;
// 有个小坑,没有找到target的话记得break, 不然也会死循环,break出去后返回-,找不到元素,符合题意
break;
}
}
return -1;
}
}
数据结构与算法 文章被收录于专栏
数据结构与算法相关题解
