标题起的又一次把自己恶心到了。。
算法实现完全来源于编程之美,最简单的DP思想的实践。
maxSubSum2方法中稍作修改,记录了下该子序列的下标。
/**
* 子数组之和的最大值:要求子数组的元素是连续的
*
* @author aaron-han
*
*/
public class MaxSubSum {
public static void main(String[] args) {
int[] arr = { 3, 5, -3, -2, 5, 8, 3, -2, 1 }; // 19
int maxSum = maxSubSum2(arr, arr.length);
System.out.println("\n" + maxSum);
}
// 尾->首
// nAll保存当前的最大子数组之和,nStart保存当前的子数组之和,初值均设为最后一个元素。
public static int maxSubSum(int[] arr, int length) {
int nAll = arr[length - 1];
int nStart = arr[length - 1];
for (int i = length - 2; i >= 0; i--) {
if (nStart < 0) { // 若为负数,则清零重新寻找。
nStart = 0;
}
nStart += arr[i];
if (nStart > nAll) { // 若当前子数组之和大于nAll,则更新nAll。
nAll = nStart;
}
}
return nAll;
}
// 在遍历求值的基础上记录了子序列的index并打印
public static int maxSubSum2(int[] arr, int length) {
int nAll = arr[length - 1];
int nStart = 0;
int endIndex = length - 1;
int startIndex = length - 1;
int tempIndex = length - 1;
for (int i = length - 1; i >= 0; i--) {
if (nStart < 0) {
nStart = 0;
tempIndex = i;
}
nStart += arr[i];
if (nStart > nAll) {
nAll = nStart;
endIndex = tempIndex;
startIndex = i;
}
}
for (int i = startIndex; i <= endIndex; i++) {
System.out.print(arr[i] + "\t");
}
return nAll;
}
}
分享到:
相关推荐
在这个问题中,我们不需要完全排序,只需要找出前3个最大值的下标,因此可以稍微修改选择排序的逻辑,每一轮找到最大值后,记录下其下标,并将其替换为0,重复此过程3次。 代码示例(Python): ```python def ...
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
通过分治算法来求解一个数组中的最大值和最小值,不仅可以有效地降低问题的复杂度,还能充分利用计算机的处理能力。此外,这种方法还具有很好的可扩展性和并行处理潜力,非常适合于处理大规模数据集。
在编程领域,数组是数据结构的基础,而查找数组中的最大值是常见的操作,尤其是在算法分析和数据处理中。本文将详细讲解如何在C语言中实现这个功能,以及它背后的逻辑和相关知识点。 首先,理解数组的基本概念至关...
题目: 编程实现找出一组数的最大值和次大值 要求: 用二分法的策略实现; (2)写出实验报告。 一、 需求分析: 1、输入要输入数组元素的个数,为数组... 3、利用二分法找出数组中的最大值和次大值; 4、输出结果;
在处理数组时,经常会遇到需要找到数组中的最大值和最小值的问题。这通常用于统计分析、排序算法或其他数学计算中。这个程序的目标就是实现这个功能。 首先,我们需要了解C语言数组的基本概念。数组是由相同类型...
本文将详细介绍一个原创的C语言算法实现,该算法能够有效地找到数组中的最大值及其索引,并通过理解这个过程来帮助读者掌握算法思想,从而能够灵活运用到其他类似问题上。 #### 算法描述 本算法的目标是在给定的...
3. 遍历算法:`foreach`循环是遍历数组的常用方式,它可以简化代码并避免索引越界问题: ```csharp foreach (int num in numbers) { Console.WriteLine(num); } ``` 4. 哈希表:虽然不是直接的数组算法,但`...
这个简单的过程展示了C语言中查找数组最大值及其最小下标的基本方法。这种方法的时间复杂度是O(n),因为我们需要遍历整个数组一次。值得注意的是,如果数组为空或者未初始化,这段代码可能会导致未定义行为,所以在...
总之,理解如何在Java中查找数组中的最大值和最小值是编程基础的一部分,也是解决更复杂问题的基础技能。通过这个例子,你可以学习到基本的循环和条件控制结构,以及如何应用它们来解决实际问题。
例如,在Python中,你可以使用内置函数`max()`和`min()`来找出最大值和最小值,`sum()`来求和,再除以数组长度得到平均值。这样的代码可能看起来像这样: ```python arr = [1, 3, 5, -2, 4, 6] max_val = max(arr) ...
本压缩包文件"算法-数组排序 按数组内数字大小排序 取得最大值或最小值.rar"包含的内容很可能是关于如何实现数组排序以及如何高效地获取数组中的最大值和最小值的详细讲解。 一、排序算法概述 排序算法是用于重新...
在编程和数据分析中,"数组最大值"是一个基础但至关重要的概念。数组是存储一系列相同类型数据的集合,而找到数组中的最大值则是常见的操作,例如在统计分析、算法实现和解决问题时。在这个场景中,我们需要生成一个...
标题中的“求一个数组中第K个最大值和最小值”是一个常见的算法问题,这个问题在计算机科学和编程领域中有着广泛的应用。它涉及到数组处理、排序以及数据查找等基本概念。接下来,我们将深入探讨这个问题的解决方案...
分治算法实验(用分治法查找数组元素的最大值和最小值) 在这个实验中,我们使用分治算法来查找数组元素的最大值和最小值。分治算法是一种常用的算法设计方法,它将问题分解成小规模的问题,然后解决这些小问题,并...
总结来说,“1.8编程基础之多维数组_08矩阵加法”不仅介绍了多维数组和矩阵加法的编程实现,还涉及了信息学奥林匹克竞赛的培训内容,这些内容为竞赛提供了全方位的技能和知识储备,帮助学生在编程和算法领域打下坚实...
标题中的“求数组的子数组之和的最大值”是一个经典的计算机科学问题,通常被称为“最大子序列和”(Maximum Subarray Problem)。这个问题在数组或序列数据结构中寻找一段连续的子序列,使得子序列的所有元素之和...
通过共享内存优化,高效地查找一个序列中的最大值并将该最大值放到序列的第一个元素位置。同时,不同于传统的利用线程和数组序号对应的方式,本算法利用连续的线程进行计算,更有利于算法的并发性
在此挑战中,我们需要编写一个程序,该程序接收一个整数数组,找到其中的最大值和最小值,并交换它们的位置,然后返回结果数组。 描述中的 "PTA" 很可能代表 "Programming Task Assistant" 或类似的在线平台,它...