【算法-Java实现】在排序数组中查找元素的开始位置和结束位置
一.问题描述:
1.输入:输入一个已经升序排列的整数型数组arr和一个目标值target。
2.输出:输出这个目标值target在数组中的开始位置和结束位置的索引。若target在数组中不存在,则返回[-1,-1]。
3.比如:输入{5,7,7,8,8,10},target=8 ;输出[3,4]
输入{5,7,7,8,8,10},target=6;输出[-1,-1]
输入{5,7,7,8,8,810},target=8;输出[3,5]
输入{5,7,7,8,8,8,10},target=10;输出[6,6]
输入{5,7,7,8,8,8,10},target=5;输出[0,-1]
二.问题解答:
方法:线性扫描(即依次遍历数组)
第一次遍历从左往右遍历,直到找到开始位置的索引值;第二次遍历从右往左遍历,直到找到结束位置的索引值。
三.算法分析:
1.时间复杂度为O(N),额外空间复杂度为O(1)。
代码如下
import java.util.Arrays;
import java.util.Scanner;
/*
* 问题:在排序数组中查找元素的开始位置和结束位置
*/
public class SearchRange {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
String str=in.nextLine();
int target=in.nextInt();
String [] strArray=str.split(",");
int[] arr=new int[strArray.length];
for(int i=0;i<arr.length;i++) {
arr[i]=Integer.valueOf(strArray[i]);
}
int[] result= SearchRange(arr, target);
System.out.println(Arrays.toString(result));
}
public static int [] SearchRange(int []arr,int target) {
int[] result= {-1,-1};
for(int i=0;i<arr.length;i++) {
if(arr[i]==target) {
result[0]=i;
break;
}
}
if(result[0]==-1) {
return result;
}
for(int j=arr.length-1;j>0;j--) {
if(arr[j]==target) {
result[1]=j;
break;
}
}
return result;
}
}