设计思路:
用随机数产生N个随机数放入一个数组里面,找到所有的子数组,并求和取最大的那个数组输出。
(从数组中第一个元素a[0]开始,依次计算a[0]、a[0]+a[1]、a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值。再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值。依次循环,直到数组最后一个元素,取出a[i]。)
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package shuzu01; import java.util.*; public class Sum { public static void main(String[] args) { Scanner input= new Scanner(System.in); System.out.print( "请输入数组中数的个数:" ); int num=input.nextInt(); int array[]= new int [num]; for ( int i= 0 ;i<num;i++) { if (( int )(Math.random()* 2 )== 0 ) { array[i]=( int )(Math.random()* 10 ); } else { array[i]=-( int )(Math.random()* 10 ); } } for ( int i= 0 ;i<num;i++) { System.out.println(array[i]); } int max= 0 ; int list[]= new int [num]; for ( int j= 0 ;j<num;j++) { max=array[j]; int sum= 0 ; for ( int t=j;t<num;t++) { sum=sum+array[t]; if (sum>max) { max=sum; } } list[j]=max; } /* for(int i=0;i<num;i++) { System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:"); System.out.println(list[i]); }*/ for ( int i= 1 ;i<num;i++) { max=list[ 0 ]; if (list[i]>max) { max=list[i]; } } System.out.print( "子数组和的最大值为:" +max); } } |
总结:求和取最大值用到了循环嵌套,时间复杂度要求没有达到
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容