c++ - kadanes算法中的错误答案
问题描述
kadane 的算法实现 input = (t=1;n=3;arr={-1,4,5}) 给出输出 8,但预期输出为 9。
#include <iostream>
#include<cmath>
using namespace std;
int Max( int *arr, int n){
int currmax = arr[0];
int globalmax = arr[0];
for(int i = 1; i < n; i++) {
currmax= max(currmax, currmax + arr[i]);
if(currmax > globalmax)
globalmax = currmax;
}
return globalmax;
}
int main() {
int t;
cin >> t;
while(t--){
int n;
cin >> n;
int arr[n];
for(int i = 0; i < n; i++) cin >> arr[i];
cout << Max(arr, n) << " ";
}
}
解决方案
更改currmax= max(currmax, currmax+arr[i])
为 currmax= max(arr[i], currmax+arr[i])
as 以将当前值与数组值进行比较。
在您的情况下 -1, 4, 5
currmax 的值将更新如下:
1. currmax = -1, currmax+arr[1] = 3 (比较 btw(4,3))
2. currmax= 4 , currmax+ arr[2] = 9 (比较 btw(5,9))
3. currmax = 9
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
int Max( int *arr, int n){
int currmax=arr[0];
int globalmax=arr[0];
for(int i=1;i<n;i++) {
currmax= max(arr[i], currmax+arr[i]); // your code line was wrong here check and try
if(currmax>globalmax)
globalmax=currmax;
}
return globalmax;
}
int main() {
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++) cin>>arr[i];
cout<<Max(arr,n)<<" ";
}
}
推荐阅读
- go - 为什么返回 int 的函数文字不能分配给返回 interface{} 的函数?
- c++ - 已经在 obj 中定义
- javascript - 用户将学生的成绩输入到作为文本框的输出中,然后计算最终的字母成绩
- python-2.7 - Flatten 和 Dense 层之间的矩阵大小不兼容
- javascript - 我们如何在 javascript 中添加两个事件监听器 click 和 keydown
- c# - 无论如何在单个语句中增加具有相同值的多个变量
- android - 如何在android studio中比较string.xml文件的unicode字符?
- wpf - WPF 中的低功耗蓝牙设备
- repo - 直接从清单 xml 文件克隆一个 repo,没有 git 存储库
- kubernetes-helm - 如何安装从远程存储库中提取的 Helm Umbrella Charts