zoukankan      html  css  js  c++  java
  • 突现灵感想出较新简单算法实现求一数组最大子数组的和

    一、题目:

          返回一个整数数组中最大子数组的和。

      要求:

      1.输入一个整形数组,数组里有正数也有负数。

      2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

      3.求所有子数组的和的最大值。要求时间复杂度为O(n)。

    二、设计思路

      首先将每一点看成辐射源,没点只能向右辐射找出所有可能的子数组求出最大值,如arr[5]={1,2,3,4,5}。首先1与1+2与1+2+3....到1+2+3+4+5找出最大值存入数组a[0]中。

    再由2向右辐射找出所有可能的子数组求出最大值存入a[1]以此类推直至最后。在求出a[5]中最大值即为此数组最大子数组的和的最大值

    三、代码


    package com.minirisoft; import java.util.*; class SuperMax { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int[] list = new int[10];//输入数组是必须先定义数组,否则出错! int[] arr1 = new int[10];//输入数组是必须先定义数组,否则出错! System.out.println("请输入数组:"); for(int k=0;k<10;k++) { list[k]=sc.nextInt(); } for(int n=0;n<9;n++) { arr1[n]=list[n]; for(int m=n;m<9;m++) { arr1[m+1]=arr1[m]+list[m+1]; } for(int m=n;m<10;m++) { if(arr1[m]>arr1[n]) { arr1[n]=arr1[m]; } } System.out.println("从第"+n+1+"个元素辐射的最大子数组的和为"+arr1[n]); } arr1[9]=list[9]; for(int i=0;i<10;i++) { if(arr1[i]>arr1[0]) { arr1[0]=arr1[i]; } } System.out.println("最大子数组的和为"+arr1[0]); } }

    四、实验截图

    五、实验体验

    有时候突发的灵感比苦做编程一天都重要。此次简单20分钟的编程41行代码完胜上个实验的8个小时

  • 相关阅读:
    SQLHelper访问类
    visual studio 2017安装教程以及各类问题解决方案
    EasyUI表格删除多个表的多条数据
    配置Java环境JDK与jre
    javascript动态结算购物车
    Linux 命令--vi/vim/yum
    Linux 命令--磁盘管理
    Linux 命令--用户和用户组管理
    Linux 命令--文件与目录管理
    Linux 目录结构说明
  • 原文地址:https://www.cnblogs.com/tianyaguying/p/4354398.html
Copyright © 2011-2022 走看看