zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和——首尾相接

    设计思路:

    数组首尾相接的问题:初定一个四个值的数组:1 -1 3 9,通过首尾相接实际上求的数组就变为了一个加长版的数组:1 -1 3 9 1 -1 3 9

    先用一个数组存储输入的数组的值,再用一个数组存储相加后的子数组和原先子数组的大的值,maxsum表示最大子数组的值,通过赋值,使数组从首位开始一次将值接到数组的尾巴处,进行到将原数组所有值都依次接到原数组尾巴处时停止,输出最大字数组值

    代码:

    package zuoye_03;
    
    import java.util.Scanner;
    
    public class shuzu3 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int a[] = new int[100];
            int sz[] = new int[100];
            int i,j,szgs1, maxsum;
            System.out.println("请输入数组元素个数:");
            int szgs = sc.nextInt();
            System.out.println("请输入数组元素:");
            for (i = 0; i < szgs; i++)
            {
                sz[i] = sc.nextInt();
            }
            a[0] = maxsum = sz[0];
            szgs1 = szgs;
            if (szgs>0)
            {
                for (j = 0; j < szgs; j++)
                {
                    for (i = j + 1; i < szgs1; i++)
                    {
                        a[i] = max(a[i - 1] + sz[i], sz[i]);
                        maxsum = max(maxsum, a[i]);
                    }
                    sz[szgs1] = sz[szgs1-szgs];
                    a[j+1] = sz[szgs1-szgs+1];
                    szgs1 =szgs1+ 1;
                }
            }
            System.out.println("最大子数组的和为:"+ maxsum );
        }
    
        private static int max(int i, int j) {
            // TODO 自动生成的方法存根
            if(i>=j) return i;
            else return j;
        }
    
    }

    感受:

    拿到一个问题一定要分解成一个个小的问题,多多分解,一个大又麻烦的问题就成了一个个小的问题,再去解决的时候就会简单很多。

  • 相关阅读:
    AutoResetEvent 2
    AutoResetEvent
    c++ 控制台输入参数
    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped
    filezilla管理网站服务器
    matlab
    WCF:无法满足对安全令牌的请求,因为身份验证失败。
    WCF 学习
    dev
    dotnetbar
  • 原文地址:https://www.cnblogs.com/zhoulonghai/p/10590717.html
Copyright © 2011-2022 走看看