给你一个n代表有一个长度为n的有序数组,然后给你一个k,你需要判断这个k是否在数组里面,如果存在就返回这个数第一次出现位置的下标,如果不存在输出-1
输入描述:
第一行输入一个n,k,其中n代表有n个数字,k代表你需要查找的元素 第二行输入n个数
输出描述:
如果在数组里面找到了k,输出k所在的下标,如果k不在,就输出-1
示例1
输入
7 0 0 1 2 3 4 5 6
输出
0
示例2
输入
7 9 0 1 2 3 4 5 6 7
输出
-1
import java.util.Scanner;
public class binarySearch {
public static int binarySearch(int[] arr,int k) {
int low=0,high=arr.length-1,mid;
int cur=-1;
while(low<=high) {
mid=low+(high-low)/2;
if(arr[mid]==k) {cur=mid;break;}
else if(k
2.查找某个位置
你需要输入一个n,一个数k,然后输入一个长度为n个大小的数组arr,然后你需要在arr上找满足>=K的最左位置,并且输出这个位置,如果不存在这个位置就输出-1。
输入描述:
第一行输入一个n,k 第二行输入长度为n个大小的数组arr
输出描述:
输出>=K的最左位置
示例1
输入
5 1
0 0 2 4 6
输出
2
示例2
输入
5 9
2 4 6 7 8
输出
-1
同样地,也可以查找arr上找满足<=K的最右位置
import java.util.Scanner;
public class findPosition {
public static int findLeftBig(int[] arr,int k) {//>=k最左位置
int low=0,high=arr.length-1,mid;
int cur=-1;
while(low<=high) {
mid=low+(high-low)/2;
if(arr[mid]>=k) {cur=mid;high=mid-1;}
else {
low=mid+1;
}
}
return cur;
}
public static int findRightSmall(int[] arr,int k) {//<=k最右位置
int low=0,high=arr.length-1,mid;
int cur=-1;
while(low<=high) {
mid=low+(high-low)/2;
if(arr[mid]<=k) {cur=mid;low=mid+1;}
else {
high=mid-1;
}
}
return cur;
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n,k;
n=scan.nextInt();
k=scan.nextInt();
int[] arr=new int[n];
for(int i=0;i
3.局部最小值问题
定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0] < arr[1],那么arr[0]是局部最小;如果arr[N-1]
输入描述:
第一行输入一个n代表下面需要输入n个数 第二行输入n个元素,任意两个相邻的数都不相等
输出描述:
返回arr中任意一个局部最小出现的位置
示例1
输入
6
6 2 3 1 5 6
输出
1
示例2
输入
1
1
输出
0
import java.util.Scanner;
public class partialMin {
public static int partialMin(int[] arr) {
int N=arr.length;
if(arr==null)return -1;
if(arr.length==1||arr[0]arr[mid-1]){
high=mid-1;
}
else {
low=mid+1;
}
}
return cur;
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n,k;
n=scan.nextInt();
int[] arr=new int[n];
for(int i=0;i



