`
bill600
  • 浏览: 5912 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

一个算法

阅读更多
题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为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的路径数

    试写一个算法,在以邻接矩阵方式储存的有向图G中求顶点i到顶点j的不含回路的长度为k的路径数

    我的第一本算法书.docx

    一个算法应该具有以下特点:确定性、有限性、输入项、输出项和可行性。 算法的分类可以从不同的角度进行。根据应用领域,可以将算法分为数学算法、图算法、搜索算法、排序算法、数据结构算法等。根据实现语言,可以...

    [精]题目试写一个算法.doc

    [精]题目试写一个算法.doc

    模型算法大全(20+种常用算法模型+代码实现)

    模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...

    构造Gray码的分治算法(C++)

    Gray码是一个长度为2的N次幂的序列,序列中无相同元素,每个元素都是长度为N位的(0,1)串,相邻元素恰好只有一位不同,用分置策略设计一个算法对任意的N构造相应的Gray码。

    算法谜题(算法谜题).pdf

    - 最优性证明:证明一个算法是否能够找到最优解或者是在特定条件下达到最优。 - 案例分析:通过对具体例子的研究来验证算法的有效性和可行性。 3. **典型算法谜题实例**: - 排序谜题:例如快速排序中的最佳分割...

    算法:C语言实现+第5部分+图算法

    不过,如果在实际开发中遇到图算法问题,可以参考一些优秀的算法学习资源,例如在给定标签中出现的“C++***”,可以理解为一个算法学习的网站地址,如果该网站提供C语言图算法的讲解和代码实例,那么对于学习和应用...

    java 24 点算法

    一个java24点算法

    CRC校验check-crc8一个算法.c

    算法

    算法分析基本概念,适合算法初学者

    2. 算法设计:其次,我们需要设计一个算法来解决这个问题。 3. 算法分析:然后,我们需要分析算法的时间和空间复杂度,以确定算法的效率。 4. 算法比较:最后,我们需要比较不同算法的优缺,选择最适合的问题解决...

    算法设计与分析课后习题答案(李春保)

    其性质说明,如果两个函数f(n)和g(n)分别代表两个算法的时间复杂度,则这两个算法的时间复杂度之和的上界为O(max{f(n),g(n)})。 5. 素数判断算法的效率分析:习题中给出了两种判断一个大于2的正整数n是否为素数的...

    逍遥风算法精华集.chm

    一个算法练习CRACKME的分析 ·25.再来一个CRACKME的算法分析 ·26.再来一个CRACKME算法分析(适合新手) ·27.一个Delphi CRACKME的算法分析(适合新手) ·28.风飘雪大侠的一个VB的CRACKME算法分析 ·29.用MASM32 ...

    数据结构与算法资料

    如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是...

    算法导论第三版完整版答案

    不过,建议你在使用答案时,先尝试自己独立解决问题,再对比答案,以确保真正掌握了每一个算法。 总的来说,《算法导论第三版完整版答案》是学习和掌握算法的宝贵资料,它能辅助你的学习过程,加深对算法的理解,...

    算法与数据结构考研试题精析

    一个算法可以用多种编程语言实现,并且同一个算法可以用不同的程序实现。 6. 算法的健壮性:一个健壮的算法应当能够处理非法输入数据的情况,避免出现错误。算法的健壮性是确保程序稳定运行的关键因素之一。 7. ...

    算法学习与设计课程 基于C++程序语言的算法分析与设计-第02章 算法分析基础 共64页.ppt

    例如,如果一个算法的时间复杂度是O(n),则表示随着输入规模n的增长,算法的运行时间呈线性增长。渐近表示法有助于比较不同算法的效率,尤其在大数据量下。 2.3 递推关系是分析递归算法的一种有力工具。递推公式...

    基于JAVA的千万级算法测试平台

    其中测试平台还包括一个算法生成的类,可以方便测试数据的生成: SortHelper类中的方法generateRandomArray的参数分别为,(num,left,right),其中第一个参数参与算法生成的数量级,由用户自行输入,参与算法的...

    误差传播与算法稳定性matlab程序

    首先,我们来看第一个算法。这个算法通过初始化一个零矩阵`sum`来存储递推值,并用`err`矩阵记录误差。它采用了一个递推公式`sum(n+1)=1-(n+1)*sum(n)`,并计算与精确值`exact(n+1)`之间的绝对误差`err(n+1)`。当n从...

Global site tag (gtag.js) - Google Analytics