【算法-Java实现】在排序数组中查找元素的开始位置和结束位置

【算法-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;
	}
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小达学加瓦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值