baidu春招题:熊回家

package com.breaver.subject;
import java.util.ArrayList;
import java.util.Scanner;

/*
一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。
现在他需要依次的从0号坐标走到N-1号坐标。
但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,
并直接将这个点忽略掉,问度度熊回家至少走多少距离?
输入描述:
输入一个正整数N, N <= 50。
接下来N个整数表示坐标,正数表示X轴的正方向,负数表示X轴的负方向。绝对值小于等于100
输出描述:
输出一个整数表示度度熊最少需要走的距离。
输入例子:
4
1 4 -1 3
输出例子:
4
Java (javac 1.7)
*/
/*
* 理解题目:这是一个图操作,从一个点到另一个点,在方圆100米内产生走动
* 1.肯定不是直接走到家所在点,就是得一个一个走过
* 2.至于到底第几个点是家所在点并不重要,因为点数没有顺序可言,而是直接制定
* 3.没有规定在起点位置的下一个位置
* 4.上述理解错误
* 5.从输入数据来看,位置只在一条坐标轴上,而输入顺序就是走动顺序
* 6.从两点之间的距离来判断去掉的点,到底是就近两个点之间的距离
* 还是说产生这个点之后,会对距离的扩展造成延伸
* 7.还有个问题--题目说第n-1个位置是家,那么要第n个做什么,所以应该是第n-1号位置
* 8.正确的距离理解:当前位置与前一个位置的差距与后一个位置的差距之后,因为首尾不能动
* 每个位置影响的距离应该时前后
* */
public class BearGoHome {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = 0;
ArrayList<Integer> al = new ArrayList<>();
n = sc.nextInt();
for(int i=0;i<n;i++)
al.add(sc.nextInt());
sc.close();
//对两点之间进行操作----在下标1到n-2
int a=0,discardIndex=1,b;
n-=1;
for(int i=1;i<n;i++){
b= al.get(i+1)>al.get(i)?al.get(i+1)-al.get(i):al.get(i)-al.get(i+1);
b+=al.get(i-1)>al.get(i)?al.get(i-1)-al.get(i):al.get(i)-al.get(i-1);
if(a < b){
a = b;
discardIndex = i;
}
}
// System.out.print(al.get(discardIndex)+"::"+discardIndex);
//去掉
al.remove(discardIndex);
a=0;
n-=1;
for(int i=0;i<n;i++)
a += al.get(i+1)>al.get(i)?al.get(i+1)-al.get(i):al.get(i)-al.get(i+1);
System.out.print(a);
}

}

原文地址:https://www.cnblogs.com/zeigongzi/p/6782740.html