-二分查找

【问题描述】给定一个升序整数数组,二分查找某一个整数t,若有则输出第一次出现的下标(从0开始),否则输出-1。

【输入形式】

第一行输入 t

第二行输入待查找数组长度

第三行输入待查找数组

【输出形式】

返回结果

【样例输入】

3

7

1 2 3 3 4 6 9

【样例输出】

2

package com;

import java.util.Scanner;

public class First {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner = new Scanner(System.in);
		
		int t=scanner.nextInt();
		
		int n=scanner.nextInt();
		
		int[] a=new int [n];
		
		for(int i=0;i<n;i++)
			a[i]=scanner.nextInt();
		

		int q=binarySearch(a,t);
		if(q!=-1)
		{
			while(a[q]==t)
			{
				q--;
			}
			System.out.println(q+1);
		}
		if(q==-1)
		System.out.println(q);
	}
	
	public static int binarySearch(int[] nums, int target) {
        int len = nums.length;
        int index = binaryFind(nums,target,0,len);
        return index;
    }
    public static  int binaryFind(int[] nums,int target,int left,int right){
        int median = (left+right)/2;
        if(left>=right)
        	return -1;
        if(nums[median]==target)
        return median;
        if(target > nums[median])
        return binaryFind(nums,target,median+1,right);
        if(target < nums[median]) 
        return binaryFind(nums,target,left,median);
		return -1;
        
    }

}

猜你喜欢

转载自blog.csdn.net/qq_40530943/article/details/80331235