在HackerRank

我能够通过所有针对此问题的公开测试用例,但实际上没有一个通过私有测试用例。我做错了什么?

来自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();
    }
}

私人测试用例仅显示“错误答案”,因此我无法弄清楚问题出在哪里。有什么理由不能解决该问题?

frazhao 回答:在HackerRank

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3169729.html

大家都在问