题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
public class FindMaxSubArr {
public int maxSum;
public int indexStart;
public int indexEnd;
/**
* 查找和值最大的子数组
*
* 如果满足要求则子数组必须满足
* 当子数组的长度大于1时,以子数组首个元素开始的,子数组的子数组,和值必须大于等于0
* 找出满足这个条件的子数组
* 并在其中找出和值最大的
*
*
* */
public void getMaxSubArr(int[] arr) {
if (arr != null && arr.length > 0) {
int start = 0;
int end = 0;
int sum = arr[0];
maxSum = sum;
indexStart = start;
indexEnd = end;
for (int i = 1; i < arr.length; i++) {
if (sum < 0) {//sum小于0表示该子数组不符合条件,重新查找下一个符合条件的子数组
sum = arr[i];
start = i;
} else {
sum += arr[i];//满足条件则继续累加
}
end = i;
if (sum >= maxSum) {//纪录当前和值最大的子数组
maxSum = sum;
indexStart = start;
indexEnd = end;
}
}
}
}
public static void main(String[] args) {
int[] arr={1, -2, 3, 10, -4, 7, 2, -5};
FindMaxSubArr test=new FindMaxSubArr();
test.getMaxSubArr(arr);
System.out.println("maxSum="+test.maxSum);
System.out.println("indexStart="+test.indexStart);
System.out.println("indexEnd="+test.indexEnd);
}
}
分享到:
相关推荐
在本文中,我们将设计一个算法来求图中一个源点到其他各顶点的最短路径。该算法使用邻接表表示图,并按照长度非递减次序打印输出最短路径的长度及相应路径。 知识点1:图论基本概念 在图论中,图是一种非线性数据...
设计一个算法采用顺序栈判断表达式中的括号是否正确配对。
试写一个算法,在以邻接矩阵方式储存的有向图G中求顶点i到顶点j的不含回路的长度为k的路径数
一个算法应该具有以下特点:确定性、有限性、输入项、输出项和可行性。 算法的分类可以从不同的角度进行。根据应用领域,可以将算法分为数学算法、图算法、搜索算法、排序算法、数据结构算法等。根据实现语言,可以...
[精]题目试写一个算法.doc
模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...
Gray码是一个长度为2的N次幂的序列,序列中无相同元素,每个元素都是长度为N位的(0,1)串,相邻元素恰好只有一位不同,用分置策略设计一个算法对任意的N构造相应的Gray码。
- 最优性证明:证明一个算法是否能够找到最优解或者是在特定条件下达到最优。 - 案例分析:通过对具体例子的研究来验证算法的有效性和可行性。 3. **典型算法谜题实例**: - 排序谜题:例如快速排序中的最佳分割...
不过,如果在实际开发中遇到图算法问题,可以参考一些优秀的算法学习资源,例如在给定标签中出现的“C++***”,可以理解为一个算法学习的网站地址,如果该网站提供C语言图算法的讲解和代码实例,那么对于学习和应用...
一个java24点算法
算法
2. 算法设计:其次,我们需要设计一个算法来解决这个问题。 3. 算法分析:然后,我们需要分析算法的时间和空间复杂度,以确定算法的效率。 4. 算法比较:最后,我们需要比较不同算法的优缺,选择最适合的问题解决...
其性质说明,如果两个函数f(n)和g(n)分别代表两个算法的时间复杂度,则这两个算法的时间复杂度之和的上界为O(max{f(n),g(n)})。 5. 素数判断算法的效率分析:习题中给出了两种判断一个大于2的正整数n是否为素数的...
一个算法练习CRACKME的分析 ·25.再来一个CRACKME的算法分析 ·26.再来一个CRACKME算法分析(适合新手) ·27.一个Delphi CRACKME的算法分析(适合新手) ·28.风飘雪大侠的一个VB的CRACKME算法分析 ·29.用MASM32 ...
如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是...
不过,建议你在使用答案时,先尝试自己独立解决问题,再对比答案,以确保真正掌握了每一个算法。 总的来说,《算法导论第三版完整版答案》是学习和掌握算法的宝贵资料,它能辅助你的学习过程,加深对算法的理解,...
一个算法可以用多种编程语言实现,并且同一个算法可以用不同的程序实现。 6. 算法的健壮性:一个健壮的算法应当能够处理非法输入数据的情况,避免出现错误。算法的健壮性是确保程序稳定运行的关键因素之一。 7. ...
例如,如果一个算法的时间复杂度是O(n),则表示随着输入规模n的增长,算法的运行时间呈线性增长。渐近表示法有助于比较不同算法的效率,尤其在大数据量下。 2.3 递推关系是分析递归算法的一种有力工具。递推公式...
其中测试平台还包括一个算法生成的类,可以方便测试数据的生成: SortHelper类中的方法generateRandomArray的参数分别为,(num,left,right),其中第一个参数参与算法生成的数量级,由用户自行输入,参与算法的...
首先,我们来看第一个算法。这个算法通过初始化一个零矩阵`sum`来存储递推值,并用`err`矩阵记录误差。它采用了一个递推公式`sum(n+1)=1-(n+1)*sum(n)`,并计算与精确值`exact(n+1)`之间的绝对误差`err(n+1)`。当n从...