区间最大值
题目:给定一个数组 求出截取出来的和和当前最小值的乘积结果的最大值
直接上答案:
/**
* 当前最小值 设每个值为当前最小值
* 前缀求和数组
* 通过栈的大小比较进出,可以确认到当前最小值的最远下标,也就是最大求和
* 升级版:顺序可以打乱
* @param args
*/
public static void main(String[] args) {
int[] number = new int[]{6,5,2,18,19};
Stack<Integer> stack = new Stack<>();
System.out.println(getMax(number));
}
public static int getMax(int[] numbers) {
if(numbers==null||numbers.length==0){
return 0;
}
Stack<Integer> stack = new Stack<>();
int[] sum = new int[numbers.length+1];
int max = 0;
for (int i = 1; i <= numbers.length; i++) {
sum[i] = sum[i - 1] + numbers[i - 1];
}
for(int i = 0;i< numbers.length;i++){
while (!stack.isEmpty() && numbers[i] < numbers[stack.peek()]){
int index = stack.pop();
int left = i;
int right = i;
if(stack.isEmpty()){
left = 0;
}else {
left = index;
}
max = Math.max(max,numbers[index]*(sum[right]-sum[left]));
}
stack.push(i);
}
while (!stack.isEmpty()){
int index = stack.pop();
int left = numbers.length;
int right = numbers.length;
if(stack.isEmpty()){
left = 0;
}else {
left =index;
}
max = Math.max(max,numbers[index]*(sum[right]-sum[left]));
}
return max;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下