algorithm - 我们如何输出标识最大子数组的索引 j 和 k
解决方案
您可以简单地使用最流行的算法Kadanes 算法。
正如算法所述,我假设传递给它的非空数组。然后我只需使用两个变量跟踪最大总和开始和结束的索引,prev
并且curr
int maxsubarray(int arr[])
{
int maxsofar = arr[0], sum = arr[0], prev = 0, curr = 0;
for i = 1 to arr.size
//number greater than the addition of sums
if(nums[i] > sum + nums[i]) prev = i;
//maximum sum till this point in the array
sum = max(nums[i], sum + nums[i])
// if this is better than what we have so far
if(sum > maxsofar)
//store this sum and the array value
maxsofar = sum
curr = i
print "start index of sum:", prev
print "end index of sum:", curr
// return the maximum value also found so far
return maxsofar;
}
推荐阅读
- asp.net-mvc - 如何使用 Ado.Net 在 MVC 的 razor 视图中显示外键相关数据
- makefile - Windows 上的 jMagick 给出错误
- python - 从锁定的文件加载 json
- xacml - ALFA 中的 1:n 关系和复杂属性类型
- oracle - 根据另一个表的映射更新表值的最有效方法是什么
- sql - MSSQL 使用 LIKE 运算符搜索 unicode 字符
- gnuplot - 使用带有“角符号”的 Gnuplot 绘制一个简单的多边形
- regex - 如何验证用逗号分隔的电子邮件地址
- c# - 无法使用 [FromQuery] ASP Net Core 2 API 绑定参数
- c# - 如何反序列化 XML 子元素