朝阳市营商环境建设监督局网站郑州seo顾问热狗
题目分析
一共n位运动员,摄影师目前的位置在x,下面n行是运动员奔跑的起点和终点。摄影师需要至少移动多少格才能同时处于n位运动员共同的区间位置。以下是根据示例一画的分析图
红线就是摄影师位置到达公共区间的最短位移距离
思路分析
用left定义公共区间的左边界,right定义右边界。每组判断是否更新左右边界,全部更新完后,判断摄影师是否在区间内,在则不动输出0;如果不在,那么x<left就移动left-x;如果x>right就移动x-right。同时如果left>right说明边界不存在,就输出-1
代码
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n= sc.nextInt();//运动员数量int x=sc.nextInt();//摄影师当前位置sc.nextLine();//吞回车int[][] arr=new int[n][2];//存每一行运动员的起始位置int left=0;//公共区间左边界int right=1001;//公共区间右边界for (int i = 0; i < n; i++) {//每行处理数据int a= sc.nextInt();//起始位置int b= sc.nextInt();//起始位置arr[i][0]= Math.min(a,b);//固定最小值arr[i][1]= Math.max(a,b);//固定最大值if (left<arr[i][0]){//判断左边界是否需要更新left=arr[i][0];//更新左边界}if (right>arr[i][1]) {//判断右边界是否需要更新right=arr[i][1];//更新右边界}sc.nextLine();//吞回车}if (left<=right){//如果公共区间正确if (left<=x&&x<=right){//如果摄影师初始位置就在区间内System.out.println(0);//不用动}else if (left>x){//如果小于左边界System.out.println(left-x);//向左边界移动} else if (right<x) {//如果大于右边界System.out.println(x-right);//向右边界移动}}else {//如果不存在公共区间System.out.println(-1);//错误}}}
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。