一、题目
二、思路
- 乘客从出发点到目的点只有两个方式,即顺时针和逆时针,我们只需要得到其中一种方式的的距离,就可得到另一种方式的距离了,返回其中的较小值。
- 需要考虑到的一点是,如果目的地地标小于出发地,则对于先算顺时针要复杂一些。所以先判断目的地和出发地地标大小,若目大于出,则顺,否则逆。
class Solution { public int distanceBetweenBusStops(int[] distance, int start, int destination) { if(start>destination){ int i=start; start=destination; destination=i; } int ans=0,total=0; for (int i = start; i < destination; i++) { ans+=distance[i]; } for (int i = 0; i < distance.length; i++) { total+=distance[i]; } if(2*ans<total) return ans; else return total-ans; } }
三、答案(官方)
- 评论区这个答案比较简单
class Solution { public int distanceBetweenBusStops(int[] distance, int start, int destination) { int d1 = 0, d2 = 0; int l = Math.min(start,destination); int r = Math.max(start,destination); for(int i=0;i<distance.length;i++){ if(i>=l && i<r){d1 += distance[i];} else{d2 += distance[i];} } return d1<d2?d1:d2; } }