【问题描述】给定一个升序整数数组,二分查找某一个整数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;
}
}