我能够通过所有针对此问题的公开测试用例,但实际上没有一个通过私有测试用例。我做错了什么?
来自hackerrank网站,它像这样:
爱丽丝是幼儿园老师。她想给班上的孩子们一些糖果。所有的孩子都排成一排,每个人都有根据其在课堂上的表现而获得的评分。爱丽丝想给每个孩子至少一个糖果。如果两个孩子挨着坐,那么评分较高的孩子必须得到更多的糖果。爱丽丝想尽量减少必须购买的糖果总数。
例如,假设她的学生等级为[4,6,4,4,5,6,2]。她以以下最小量给学生糖果:[1、2、1、2、3、1]。她必须至少购买10个糖果。
(https://www.hackerrank.com/challenges/candies/problem)
我对这个问题的解决方案包括遍历整个数组,检查它之前的数字(如果更大,则比前一个多一个糖果,如果更少,再检查下一个条件),之后(遍历一个循环)确定该值应该多高。
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the candies function below.
static long candies(int n,int[] arr) {
long last = 0;
long candies = 0;
for (int i = 0; i< arr.length; i++) {
if (i == 0) {
while (arr[i] > arr[i+1]) {
i++;
}
last = i+1;
candies += last;
i = 0;
} else if (arr[i] > arr[i-1]) {
last++;
candies += last;
} else {
int c = 1;
while (i+c<arr.length && arr[i+c-1] > arr[i+c]) {
c++;
}
last = c;
candies += last;
}
System.out.println(last);
}
return candies;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int n = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
int arrItem = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
arr[i] = arrItem;
}
long result = candies(n,arr);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}
私人测试用例仅显示“错误答案”,因此我无法弄清楚问题出在哪里。有什么理由不能解决该问题?