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

核心贪心逻辑:
遍历数组时,维护「当前子数组的和(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);
}
}

浙公网安备 33010602011771号