java有一个环形的公路上面共有n站现在给定了顺时针第占到第i+ 1站之间的距离特殊的也给出了第n站到第 1 站的距离。小美想沿着公路第x站走到第Y站她想知道最短的距离是多少1输入描述第一行输入一个正整数n代表站的数量。第二行输入n个正整数ai前n-1个数代表顺时针沿着公路走i站到第i+ 1站之间的距离;最后一个正整数代表顺时针沿着公路走第n站到第1站的距离第三行输入两个正整数x和y代表小美的出发
解题思路: 首先计算小美从起点到终点的直线距离,即从x到y的距离。 然后计算小美从起点顺时针走一圈再到终点的距离,即从x到n再到1再到y的距离。 最后取这两个距离的最小值作为答案。
具体步骤:
- 读取输入的n、ai、x和y。
- 计算从x到y的直线距离dist1。
- 计算从x到n再到1再到y的距离dist2。即先计算从x到n的距离sum1,再计算从1到y的距离sum2,最后将sum1和sum2相加得到dist2。
- 将dist1和dist2比较,取较小值作为答案。
- 输出答案。
代码实现如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
int x = scanner.nextInt();
int y = scanner.nextInt();
int dist1 = Math.abs(x - y);
int dist2 = 0;
for (int i = x; i != y; i = (i % n) + 1) {
dist2 += a[i-1];
}
dist2 += a[n-1];
int answer = Math.min(dist1, dist2);
System.out.println(answer);
}
}
时间复杂度分析: 计算直线距离的时间复杂度为O(1)。 计算环形距离的时间复杂度为O(n)。 因此,总的时间复杂度为O(n)
原文地址: https://www.cveoy.top/t/topic/iBnP 著作权归作者所有。请勿转载和采集!