题目链接:
计算机软件能力认证考试系统http://118.190.20.162/view.page?gpid=T138
【分析】双指针,注意判定条件就行。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int i = 0, j = 0, ans = 0;
int[] a = new int[n];
for(int k = 0; k < n; k++){
a[k] = scanner.nextInt();
}
int[] arr = new int[m];
while(i < n && j < m){
while(i < n && a[i] <= j) i++;
arr[j] = i;
ans += i;
j++;
}
while(j < m){
arr[j] = i;
ans += i;
j++;
}
// for(int k = 0; k < m; k++){
// System.out.print(arr[k]);
// System.out.print(" ");
// }
System.out.println(ans);
}
}
【优化】其实可以直接得到每个下标的个数
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int i, j, ans = 0;
int[] a = new int[n];
for(i = 0; i < n; i++){
a[i] = scanner.nextInt();
}
for(i = 1; i < n; i++){
ans += (a[i] - a[i - 1]) * i;
}
ans += i * (m - a[i - 1]);
System.out.println(ans);
}
}