求子数组最大值

设计思路:用户输入一个数组本次规定为4个数的数组,可根据需要进行修改,关于如何求出子数组中和的最大值:应该先明确最大值的来源数组一定包括原来数组中的最大值,因此找到这个最大值并记录下标,定义两个和的变量temp和temp1,从最大值下标开始逐一求和比较最终得到子数组最大的和。

源代码:

package arrsum;
import java.util.Scanner;

public class Sum {

    public static void main(String[] args) {
        int arr[]= new int[10];
        int i,sum=arr[0];
        int temp=arr[0];
        int temp2=arr[0];
        int max=arr[0],max1=arr[0];
        int max2=arr[0];
        int n;
        Scanner sc=new Scanner(System.in);
            System.out.println("请输入一个4个数的数组");
         for(i=0;i<4;i++)
         {
             arr[i]=sc.nextInt();
         }
           for(i=0;i<4;i++)
            {
                if(arr[i]<arr[i+1])
                    max2=arr[i+1];
                      n=i+1;
                          temp+=arr[n];
                             temp2+=arr[n+1];

                    if(temp>temp2)
                        max=temp;
                    else
                        max1=temp2;
            } 

           if(max>max1)
                 sum=max;
              else
                     sum=max1;

            System.out.println(sum);
        }

    }结果截图:总结:解决问题的关键在于找出问题的关键所在,因此在以后的编程过程中我应当多加注意充分的思考。
时间: 2024-10-11 23:14:46

求子数组最大值的相关文章

求子数组之和最大值

求子数组之和最大值 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 真言 让自己爆发吧,不要在安于现状了. 题目 求子数组之和最大值. 方案 我的算法执行如下,C++表示如下(

输入一组整数,求子数组和的最大值。(数组进行首尾相接之后)

输入一组整数,求子数组和的最大值. 题目:返回一个一维整数数组中最大子数组的和. 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. ? 10 -9 8 7 -5 3 ? i : 4 3 2 1 0 ? nALL : 3 3 7 15 15 16 ? nStart: 3 -2 7 15 6 16 ? nStart = max(arr[i], arr[i]+

二维数组求子数组之和最大值(首尾相接, 圆柱)

问题:求二维数组的子数组之和的最大值(首尾相接,即形成圆柱) 成员: 陈晨:负责代码复审和代码测试计划 王颖瑞:负责程序分析,代码编程 思路:对于这个问题,我们可以结合之前的实验(二维数组求子数组之和的最大值和首尾相连一维数组的子数组之和的最大值),把为二维数组的列扩大二倍,之后想一维数组(首尾相连)一样,把二维数组分成不同的几个二维数组.之后就分开求不同的二维数组的子数组的最大值,最后之间比较,求出总的最大值. 代码: #include<iostream> using namespace s

【编程题目】求子数组的最大和 ☆

3.求子数组的最大和(数组)题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为 O(n).例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为 3, 10, -4, 7, 2,因此输出为该子数组的和 18. 算法里学过,动态规划.具体思路想不起来了,看了看书.要动态算1-i个元素中必须包括第i个元素的最大子段和C[i],A是原始序列 C[i + 1] = A[

子数组最大值02

合作过程:     由于上次作业设计思想不同,经过讨论采用了统一的设计思想.对于这次的作业我们一起进行讨论,我们统一利用二维数组完成一维数组的循环求子数组.我负责进行编码,丽萍负责进行代码的审查和代码的测试. 设计思想: 基于上次不循环一维数组求子数组的最大值. 1.将一维数组转化为二维数组,变相将其转化为循环.即二维数组每一行使一维数组依次向前移动一个数. 2.利用上次思想一次求出每行子数组的最大值. 2.1.定义两个数s,max用来更新子数组的最大值,从数组data[]的data[n-1]开

微软算法100题03 求子数组的最大和

3.求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18 思路:使用辅助变量max 记录子数组的最大和,从数组头开始遍历,如果数组元素与之前的总和的sum是负数,则重置sum结果为零,否则将得到的sum值与max比较 如果小于ma

环状连续数组,求子数组最大和

今天看到环状连续数组求子数组最大和的题目,看了几篇博客,但是好像有问题,可以举出反例.于是参考其他人的博客自己又总结下. 首先,求非环状的数组中子数组 最大和问题是一个动态规划的思想. sum[i] = max(sum(i-1) + a[i], a[i]); sum[i]代表以i元素结尾的子数组的最大和,sum[i-1]代表以i-1元素结尾的子数组的最大和,a[i]代表第i个元素的值,由此公式可得,以第i个元素结尾的子数组的最大和可以由它之前的以第i-1个元素结尾的子数组的最大和推导出.如果以i

[华为机试练习题]56.求子数组的最大和

题目 描述: 输入一个整形数组.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 接口 Int GetSubArraySum(Int* pIntArray,Int nCount): 规格 要求时间复杂度为O(n) 举例 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18 练习阶段: 初级 代码 /*-------------------------------

求子数组的最大和要求O(n)

//求子数组的最大和 //输入一个整形数组.有整数也有负数,数组中连续一个或多个子数组,每一个子数组都有一个和,求全部子数组的和的最大值,要求时间复杂度O(n) #include<iostream> int GetMax( int * arr) { int max = arr[0]; for (int i = 1; i < 10; i++) { if (max < arr[i]) { max = arr[i]; } } return max; } int getMaxSum(int