`
zhongkem
  • 浏览: 152468 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

求子数组的和的最大值

 
阅读更多

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18

 

解法比较简单,直接代码:

 

public class MaxsubArray {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int list[] = {-1, -1, -1, 10, -1, 5, -1, -1};   
		int max = getmaxsub(list);  
		System.out.println(max);
	}

	public static int getmaxsub(int a[]) {
		int sum;//当前位置的和
		int max;//目前为止最大的子数组和
		int left,right;//子数组的位置
		int t1;//子数组的临时左位置
		//初始化
		sum=max=a[0];
		left=right=t1=0;
		for(int i=1;i<a.length;i++){
			sum+=a[i];			
			if(sum<0){
				sum=0;//如果和为负了,就应该重新计算
				t1=i+1;//t1也从下一个位置开始
				continue;
			}
			if(sum>max){//如果当前和比原先的最大值还大
				max=sum;//最大值等于当前值
				left=t1;//左右区间也要调成相应的
				right=i;
			}
		}
		for(int i=left;i<=right;i++){
			System.out.println(a[i]);
		}
		return max;
	}
}

 

分享到:
评论

相关推荐

    C语言程序:求子数组的最大和

    求子数组的最大和 题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -...

    求子数组最大和

    在编程领域,"求子数组最大和"是一个经典的算法问题,常见于计算机科学的数据结构与算法课程中。这个问题的目标是给定一个整数数组,找出这个数组中的一个连续子数组,使得其元素之和最大。这个问题的一个著名解决...

    Java实现求子数组和的最大值算法示例

    "Java实现求子数组和的最大值算法示例" 本文主要介绍了Java实现求子数组和的最大值算法,涉及Java数组遍历、判断、运算等相关操作技巧。下面是对该算法的详细讲解和分析。 首先,需要了解子数组的概念。子数组是...

    求子数组最大和的解决方法详解

    【标题】:"求子数组最大和的解决方法详解" 【描述】:"本文深入探讨了求解子数组最大和的有效算法,适合需要了解此问题解决方案的人参考" 【标签】:"求子数组的最大和" 在计算机科学中,求子数组最大和是一个...

    求子数组最大和的实例代码

    总结来说,求子数组最大和的问题可以通过动态规划的Kadane算法在O(n)的时间复杂度内解决。实例代码展示了如何实现这个算法,通过比较当前元素与前一个子数组和,找出能够构成更大和的策略,并在遍历过程中保持最大子...

    求一组数组的两个最大值和两个最小值 分治法

    3. **排序子数组**:使用冒泡排序对 `C1` 和 `C2` 进行排序,从而找到每个子数组的最大值和最小值。 4. **合并结果**:将 `C1` 和 `C2` 的四个最大值合并到数组 `Max` 中,四个最小值合并到数组 `Min` 中。 5. **...

    PHP实现求连续子数组最大和问题2种解决方法

    求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 关于连续子数组...

    几个经典算法源代码文件

    求子数组和的最大值 power函数的实现 10次90环的组合数 有两个整形数组,交换两个数组的元素使得两个元素和的差最小 打印幻方 走方格 求数对之差最大值 现有整型数组{1,2,4,3,5,8},写出一个函数,找出...

    Google微软-华为腾讯-面试笔试数据结构和算法编程题目和部分答案

    这其中包括了二元查找树转换为排序双向链表、设计包含min函数的栈、求子数组的最大和、在二元树中找出和为某一值的所有路径、查找最小的k个元素等题目。这些题目都是常见的数据结构和算法面试题目,旨在考察面试者的...

    算法面试题总结_嵌入式-常用知识&面试题库_大厂面试真题.doc

    3. 求子数组的最大和:本题目考察了数组和算法的知识,要求求出所有子数组的和的最大值。解决方法是使用动态规划算法,维护一个数组,记录每个子数组的和,最后输出最大值。 4. 在二元树中找出和为某一值的所有路径...

    各大公司算法面试题

    - 这样,我们只需要遍历一次数组,就可以计算出所有可能子数组的最大和,最后返回`dp`数组中的最大值即可。 #### 4. 在二元树中找出和为某一值的所有路径 - **知识点**: 二元树、深度优先搜索(DFS)。 - **解析*...

    微软等公司数据结构+算法面试100题

    求子数组的最大和 **题目描述**:给定一个包含正数和负数的数组,求所有子数组和的最大值。 **解决方案**:可以使用动态规划的方法。定义一个dp数组,其中dp[i]表示以i结尾的子数组的最大和。初始条件dp[0]=arr[0...

    微软等数据结构+算法面试100题首次完整亮相

    **题目描述**:给定一个包含正数和负数的整数数组,要求找到其中所有连续子数组的和,并返回这些和中的最大值。要求时间复杂度为O(n)。 **解题思路**: - 使用动态规划的方法解决。 - 定义一个变量`maxSum`用于记录...

    [汇总II][最新整理]微软等公司数据结构%2B算法面试100题[第1-80题].pdf

    3. **求子数组最大和** 这是著名的“Kadane's Algorithm”。算法的核心思想是动态规划,通过遍历数组一次,维护当前子数组的最大和以及全局最大和。如果当前元素大于当前子数组的和加上当前元素,那么更新子数组的...

    数据结构+算法面试100题.pdf

    3. 求子数组的最大和 本题目要求输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。解决这个问题的关键是使用动态规划的思想...

    微软等数据结构+算法面试100题

    求子数组的最大和 这个题目要求在给定的数组中找到具有最大和的连续子数组。这是一个经典的动态规划问题,可以通过Kadane算法来解决,时间复杂度为O(n)。基本思路是从左至右遍历数组,维护一个变量来记录到当前...

    面试中经常被问到的80道算法题

    知识点三: 求子数组的最大和 在这道题中,我们需要计算一个数组中的所有子数组的和,并输出最大值。为了实现这一目标,我们需要对数组进行遍历,并使用合适的算法来计算子数组的和。 知识点四: 在二元树中找出和为...

    微软等公司数据结构-算法面试第1-100题汇总

    3. **求子数组最大和**: - 这是一个经典的Kadane's Algorithm问题,通过动态规划找到连续子数组的最大和。 - 遍历数组,每次比较当前元素与当前子数组和(初始化为负无穷大)和上一子数组和加上当前元素,取较大...

Global site tag (gtag.js) - Google Analytics