题解 | #获得最多的奖金#

获得最多的奖金

http://www.nowcoder.com/practice/247f7bd088764aefa7474cff27489095

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        //将数组分为三组,1,3两组金额要相等,可维护两个指针分别从首尾开始遍历,
        // 如果金额相等就保存,直到两指针相遇,返回最大相等的金额
        int left = 0,right = n - 1;
        int leftSum = 0,rightSum = 0;
        long maxSum = 0;//最大金额
        leftSum += arr[left];
        rightSum += arr[right];
        while (left < right){
            if (leftSum < rightSum){
                leftSum += arr[++left];
            }else if (leftSum > rightSum){
                rightSum += arr[--right];
            }else if (leftSum == rightSum){
                maxSum = Math.max(maxSum,leftSum);
                leftSum += arr[++left];
                rightSum += arr[--right];
            }
        }
        System.out.println(maxSum);
    }
}
全部评论
leftSum和rightSum要用long定义吧
点赞 回复 分享
发布于 2022-07-05 07:48

相关推荐

03-03 19:02
已编辑
东华理工大学 Node.js
点赞 评论 收藏
分享
Gardenia06...:刚开始学是这样的,可以看看左神和灵神都讲的不错
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务