百度面试题 度度熊回家

时间限制:1秒

空间限制:32768K

一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
输入描述:
输入一个正整数N, N <= 50。

接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
输出描述:
输出一个整数表示度度熊最少需要走的距离。
输入例子1:
4
1 4 -1 3
输出例子1:
4


解题思路: 题目说法有些不准确,其实就是第一个点为当前位置,最后一个点为家,
           需要依次走过这些点回家,可以跳过中间某一个点,求至少距离。
           先求出走过所有的点的距离的总和 再求出跳过某个点后跳过的最大距离 
           最后用总和减去跳过最大距离 就是跳过某个点后 至少走的最短距离
           跳过某个点的距离为: |前一个点-这个点| +|这个点-后一个点|-|前一个点-后一个点|
                       //关键就是需要减去 前一个点到后一个点的距离 才是跳过这个点的距离



java源代码:
           
import java.util.*;  

public class MinDistanceGoHome{  
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); 
		int count =sc.nextInt();
		int sumD=0;//记录所有点都走之后的总距离
		int []d =new int[count];
		d[0]=sc.nextInt();
		for(int i=1;i<count;i++){
			d[i]=sc.nextInt();
			sumD+=Math.abs(d[i]-d[i-1]);//求和
		}

		//找出跳过某个点后 跳过的最大距离
		int maxSuff=0;
		for(int i=1;i<count-1;i++){
			//跳过某一个点 所跳过的距离为  |前一个点-这个点| +|这个点-后一个点|-|前一个点-后一个点|
			//关键就是需要减去 前一个点到后一个点的距离  才是跳过这个点的距离
			int distance =Math.abs(d[i]-d[i-1])+Math.abs(d[i]-d[i+1])-Math.abs(d[i-1]-d[i+1]);
			if(distance>maxSuff)
				maxSuff=distance;
		}
		System.out.println(sumD-maxSuff);

	}

} 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值