题目描述
现在有一个长度为n的升序数组,请你找出x是其中的第几个,若存在多个x,输出最靠前的x的位置
输入格式
输入共两行
第一行两个整数n,x,n代表数组的长度,x表示需要查找的数
第二行为n个整数,代表长度为n的数组
输出格式
输出共一个整数p,表示x所在的位置
输入输出样例
输入 #1 复制
5 7
1 3 5 7 9
输出 #1 复制
4
输入 #2 复制
5 3
1 3 3 3 5
输出 #2 复制
2
说明/提示
1≤n≤100000000
1≤a[i]≤100000000
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
long long n,m,index;
cin>>n>>m;
long long *p = new long long[n];
for(long long i=0;i<n;i++){
cin>>p[i];
}
long long first=0,last=n-1,mid;
while(last >= first){
mid = (first+last)/2;
if(p[mid] == m ){
index = mid;
last = mid -1;
}
else if(p[mid] > m){
last = mid-1;
}
else{
first = mid + 1 ;
}
}
cout<<index+1;
return 0;
}
Java题解:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n,x;
n = scanner.nextInt();
x = scanner.nextInt();
int Array[] = new int[n];
for(int i=0;i<n;i++){
Array[i] = scanner.nextInt();
}
int first = 0,last = n-1,middle,index = 0;
while(first <= last){
middle = (first + last) / 2;
if(Array[middle] == x){
index = middle;
last = middle-1;
}
if(Array[middle] > x){
last = middle-1;
}
if(Array[middle] < x){
first = middle+1;
}
}
System.out.println(index+1);
}
}