华为OD机试-2024年E卷-贪吃的猴子[200分]

样例输入 1

7
1 2 2 7 3 6 1  
3

样例输出 1

10

样例输入 2

3
1 2 3
3  

样例输出 2

6

样例输入 3

4
4 2 2 3
2

样例输出 3

7

思路:

1:bananaCounts 方法用的是暴力破解,好比说输入是

4

4 2 2 3

2

那我们求的时候可以从尾部开始取 2 3, 3 4, 4 2三个,代码实现就是,从a.length - n + i开始遍历计算count,i的范围是<采摘次数+1次。

2:贪心

public class OJTest5 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < a.length; i++) {
            a[i] = in.nextInt();
        }
        int N = in.nextInt();
        System.out.println(bananaCounts(a, N));
        System.out.println(bananaCounts2(a, N));
    }

    private static int bananaCounts(int[] a, int n) {
        int maxCount = 0;
        for (int i = 0; i <= n; i++) {
            int count = 0;
            int flag = 0;
            for (int j = a.length - n + i; j < a.length + i; ) {
                if (j >= a.length) {
                    j = j % a.length;
                }
                count += a[j];
                j++;
                flag++;
                if (flag == n) {
                    break;
                }
            }
            maxCount = Math.max(maxCount, count);
        }
        return maxCount;
    }
    private static int bananaCounts2(int[] a, int n) {
        int maxScore = 0;
        for (int i = 0; i < n; i++) {
            maxScore += a[i];
        }

        int currentScore = maxScore;
        int left = n - 1, right = a.length - 1;
        while (left >= 0) {
            maxScore -= a[left--];
            maxScore += a[right--];
            currentScore = Math.max(currentScore, maxScore);
        }
        return currentScore;
    }
}

全部评论

相关推荐

今天 11:23
重庆邮电大学 C++
点赞 评论 收藏
分享
10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
点赞 2 评论
分享
牛客网
牛客企业服务