【华为笔试真题】贪心【2026/4/3】

image

核心贪心逻辑:
遍历数组时,维护「当前子数组的和(currentSum)」,对每个元素做局部最优选择:
如果「当前子数组和 + 当前元素」> 当前元素 → 把当前元素加入当前子数组(延续之前的子数组);
如果「当前子数组和 + 当前元素」≤ 当前元素 → 放弃之前的子数组,以当前元素为新子数组的起点(因为之前的和是负数,加上只会拖后腿);
每一步都更新「全局最大和(maxSum)」。


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int[] num=new int[n];
        for (int i = 0; i < n; i++) {
            num[i]=sc.nextInt();
        }
        //表示从哪开始
        int left=0;
        int right=0;
        long ans=Long.MIN_VALUE;
        for (left = 0; left < n; left++) {
            long max=num[left];
            ans=Math.max(ans,max);
            for (right = left+1; right < n; right++) {
                if(max<0){
                    //如果不能继续增长,那必然不可能是最大值
                    ans=Math.max(ans,max);
                    left=right-1;
                    break;
                }else{
                    max+=num[right];
                    ans=Math.max(ans,max);
                }
            }
        }
        System.out.println(ans);

    }


}
posted @ 2026-04-03 17:06  Jwwind  阅读(8)  评论(0)    收藏  举报