• 首位相连数组求最大子数组的和


    1.设计思路:首先需要定义一个数组,用来存储数值,接着定义一个是上一个数组长度2倍的数组,通过赋值保证原数组能够首尾相连,接着套用求子数组的最大和的方法,不过在求子数组最大和时,必须保证子数组的长度不超过原数组的长度。

    2源程序:

    package shuzu;
    
    import java.util.Scanner;//循环数组首位相连
    
    public class MAX {
        
        public static void main(String[] args) {
            int number;
            System.out.println("请输入数组的长度");
            Scanner sc=new Scanner(System.in);
            number=sc.nextInt();
            int array[]=new int[number];
            int array1[]=new int[2*number];
            System.out.println("请输入数组的值");
            for(int i=0;i<number;i++) {
                array[i]=sc.nextInt();
            }//输入数组的值
            int maxsum,maxstart;    
            System.out.println("请输入数组");
            for(int i=0;i<2*number;i++) {
                if(i<number) {
                    array1[i]=array[i];
                }else if(i>=number) {
                    array1[i]=array[i%number];
                } //保证数组首位相连
                System.out.println("array1[i]"+i+"="+array1[i]);
            }
            maxsum=array1[0];
            maxstart=array1[0];
    //        int y=0;
            int start=0;
            for(int i=1;i<2*number-1;i++) {
                if(maxstart<0) {
                    maxstart=0;
                    start=i;
                }
                maxstart+=array1[i];
                if(maxstart>maxsum) {
                    maxsum=maxstart;
                }
                if((i-start+2)>number) {
                    break;
                }//判断子数组长度是否大于原数组长度
            }
            System.out.println("最大子数组的和为"+maxsum);
        }
    }

    3.测试结果:

    4自我感想:这道题目是在求子数组的和最大值的改编,其内容基本一致,只是添加了如何让数组首尾相连,一道题目在不同的条件下就可能出现不同的问题,这也需要我们 不断地去思考,去学习。

  • 相关阅读:
    Hello World!
    Nginx加权轮询算法
    git常用命令
    linux命令
    sql 表值函数与标量值函数
    数据查询和操纵时连接的打开状态
    插入一条和上一条数据关联的数据
    C# 输出24小时格式时间
    c#中用sql存储过程
    AndroidManifest.xml文件解析
  • 原文地址:https://www.cnblogs.com/1502762920-com/p/10588201.html
Copyright © 2020-2023  润新知