百度面试题 度度熊回家

来源:互联网 发布:java环境变量设置win7 编辑:程序博客网 时间:2024/06/05 06:53

时间限制:1秒

空间限制:32768K

一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
输入描述:
输入一个正整数N, N <= 50。接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
输出描述:
输出一个整数表示度度熊最少需要走的距离。
输入例子1:
41 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);}} 








原创粉丝点击