二分查找

题目:

给定一个 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]之间。

思路:查找数组元素下标,可以直接直接遍历查找。但如果数组内的数据是排序好的,那就可以用二分法

代码:

import java.util.Scanner;

public class B {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        System.out.print("n=");
        int n=scanner.nextInt();

        System.out.print("nums=");
        int[] nums=new int[n];
        for(int i=0;i<n;i++){
            nums[i]=scanner.nextInt();
        }

        System.out.print("target=");
        int target=scanner.nextInt();

        int mid=n/2;       //中间下标
        int left=0;        //左下标
        int right=n-1;     //右下标

        while(true){
            if(nums[mid]>target){  //mid 在target的左边
                right=mid;  //右下标更新  
                mid=(mid+left)/2;    //mid更新
            }else if(nums[mid]<target){
                left=mid;
                mid=(mid+right/2);
            }else if(nums[mid]==target){
                System.out.println(mid);
                break;
            }else{
                break;
            }
        }
    }
}

运行结果:
image

posted @ 2021-07-27 20:06  为搞钱而写代码  阅读(51)  评论(0)    收藏  举报