题目描述
给定一个元素升序的整型数组 T 和一个目标值 x ,请使用二分查找法结合分治策略查找 T 中的 x,如果目标值存在输出下标,否则输出 -1。
输入的第一行为数组 T 的各个元素,输入的第二行为目标值 x。
样例输入输出
样例1
//输入:
-1 0 1 3 6 10
6
//输出:
4
样例2
输入:
-1 0 1 3 6 10
2
输出:
-1
代码1:
import java.util.Scanner;
public class mytsest1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputString = sc.nextLine();
String stringArray[] = inputString.split(" ");
int num[] = new int[stringArray.length];
for (int i = 0; i < stringArray.length; i++) {
num[i] = Integer.parseInt(stringArray[i]);
//System.out.println(stringArray[i]);
}
int target=sc.nextInt();
System.out.println(search(num,target));
}
public static int search(int[] nums, int target) {
int pivot;
int left = 0;
int right = nums.length - 1;
while (left <= right) {
pivot = left + (right - left) / 2;
if (nums[pivot] == target) return pivot;
if (target < nums[pivot]) right = pivot - 1;
else left = pivot + 1;
}
return -1;
}
}
代码2:
import java.util.Arrays;
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputString = sc.nextLine(); //输入一行
String stringArray[] = inputString.split(" ");
int num[] = new int[stringArray.length];
for (int i = 0; i < stringArray.length; i++) {
num[i] = Integer.parseInt(stringArray[i]);
//System.out.println(stringArray[i]);
}
int target=sc.nextInt();
int index=Arrays.binarySearch(num,target);
if(index<0) System.out.println(-1);
else System.out.println(index);
}}