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

  • Post author:
  • Post category:其他



提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档




题目



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



示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9

输出: 4

解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2

输出: -1

解释: 2 不存在 nums 中因此返回 -1

提示:

你可以假设 nums 中的所有元素是不重复的。

n 将在 [1, 10000]之间。

nums 的每个元素都将在 [-9999, 9999]之间。



题解

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length-1;
        while(left<=right){
            int mid = left+(right-left)/2;
            if(nums[mid] > target){
                right = mid-1;

            }else if(nums[mid]<target){
                left = mid +1;
            }else{
                return mid;
            }
        }
        return -1;


    }
}



解析

  • 设置数组的左右边界 left和right

    left=0 (左边界) right=nums.length-1 (右边界)
  • 循环遍历

    • 设置动态中间值 mid=left+(right-left)/2
    • 将设定值和中间值进行比较

      nums[mid] 和 targe

      • 如果nums[mid] > target则再左边,左不变 right=mid-1
      • 如果nums[mid] < target则再右边,左不变 left=mid +1
      • 否则不匹配 返回-1



版权声明:本文为weixin_45822938原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。