zoukankan      html  css  js  c++  java
  • 返回一个一维整数环形数组中最大子数组的和

    一、设计思路

    基本思路与 ‘返回一个一维整数数组中最大子数组的和’ 相差不多,但是多了一个循环,具体如下:

    让每一个数组中的数字都作为该数组的第一个数字进行for循环,再在这个for循环里求出该整数数组中最大子数组的和,然后把每一个最大值的数字存进去一个新的数组里进行for循环,求出最大值,即为结果。

    求每一个数组里的最大子数组和的值的方法为: 先定义一个与原数组长度相同的空数组,然后将原数组的第一个数赋值给空数组的第一个位置,然后用循环比较原数组的数字与空数组的前一个数字相加是否为负数,如果为负数,则两个数组都 “+1/+1” 重新开始循环比较,得到第二个数组后进行比较就可以得到整数数组中最大子数组的和。

    让每一个数组中的数字都作为该数组的第一个数字进行for循环的方法为: 定义一个长度为二倍原数组长的空数组,例如原数组的长度为n,则赋值空数组if(i<n) akong[n]=ayuan[n], if(i>n) akong[n]=ayuan[n-i],(akong 表示新建空数组,ayuan 表示原数组,可自行定义数组名),然后for循环即可。

    二、源程序代码:

    //返回一个整数环形数组中最大子数组的和。
    //信1405-1班   20142966  黄伟鹏
    import java.util.Scanner;
    public class shuzu2 {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            int i,j,length;
            System.out.println("请输入要进行比较的数字个数:");
            Scanner in=new Scanner(System.in);
            //定义数组长度
            length=in.nextInt();
            int list[]=new int[length];
            System.out.println("请输入要进行比较的数字:");
            Scanner t=new Scanner(System.in);
            //定义数组的内容
            for(i=0;i<length;i++)
            {
                list[i]=t.nextInt();
            }
            //定义一个空的存储数组
            int list2[]=new int[length+length];
            int size[]=new int[length];
            int size2[]=new int[length];
            //paixu
            for(j=0;j<2*length;j++)
            {
                if(j<length)
                {
                    list2[j]=list[j];
                }
                else if(j>=length)
                    list2[j]=list[j-length];
                    
            }
            //将数组中的数字相加,求最大值
                for(j=0;j<length;j++)
                {
                    size[0]=list[0];
                    for(i=1;i<length;i++)
                    {
                        list[i]=list2[i+j];
                        if(size[i-1]<0)
                        {
                            size[i]=list[i];
                        }
                        else
                        {
                            size[i]=list[i]+size[i-1];
                        }
                    }
                    //求出一次循环最大值
                    for(i=0;i<length-1;i++)
                    {
                        if(size[0]<size[i+1])
                        {
                            size[0]=size[i+1];
                        }
                    }
                    size2[j]=size[0];
                }
                for(i=0;i<length-1;i++)
                {
                    if(size2[0]<size2[i+1])
                    {
                        size2[0]=size2[i+1];
                    }
                }
            
                   
                    //输出最大值
                    System.out.println(size2[0]);
        }
    
    }

    三、运行结果截图:

  • 相关阅读:
    Unix/Linux环境C编程入门教程(23) 字符数字那些事儿
    Unix/Linux环境C编程入门教程(22) C/C++如何获取程序的运行时间
    如何定义函数模板
    Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
    为什么使用模板
    CC++初学者编程教程(16) 搭建Xcode cocos2dx开发环境
    delete noprompt archivelog 报错ORA-00245,RMAN-08132
    RMAN-03002、RMAN-06059
    RAC RMAN 备份 RMAN-03009 ORA-19504 ORA-27040 RMAN-06012 channel c3 not allocated 错误分析
    RMAN备份到NFS,报错 ORA-27054
  • 原文地址:https://www.cnblogs.com/xiaoabu/p/5395885.html
Copyright © 2011-2022 走看看