求数组中的最小子数组,时间复杂度o(n),java

 

石家庄铁道大学    信1405-1 班   唐炳辉

 

题目:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。

 

 

设计思路:两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值,当并入的值为小于零的时候,就没必要进行继续的相加了,因为再加也不可能比后边单独的数字大,所以,为负数就重新刷新位置,重置子数组的长度重新去找一个新的子数组

 

 1 //石家庄铁道大学    信1405-1 班   唐炳辉:三藏
 2 /**给定一个数组,求出这个数组中子数组的最大值,求出,要求时间复杂度为O(n)**/
 3  package java_ketang;
 4 import java.util.Scanner;
 5 
 6 
 7  
 8 public class MinArray {
 9 
10 
11 
12 public static void main(String[] args) {
13     MinArray f = new MinArray();
14         
15     //用户自己定义数组的长度并 自行输入一串数组
16         
17         Scanner in=new Scanner(System.in);
18         System.out.print("请输入数组长度:");
19         int flase0g=in.nextInt();
20         //输入数组中的各个数值
21         System.out.print("请依次输入整数:");
22         int Arr[]=new int[flase0g];
23         for(int i=0;i<flase0g;i++)
24         {
25             Arr[i]=in.nextInt();
26         } 
27         //输出用户输入的数组  
28         System.out.print("您输入的数组为 ");
29         for(int i=0;i<flase0g;i++)
30         {
31             System.out.print(Arr[i]+"  ")  ;
32         }  
33         
34         //输出最后的结果
35         f.findMaxArr(Arr);
36     }
37 
38     public void findMaxArr(int[] arr) {
39         int Arr = 0;//用来记录当前并入的数组的和
40         int MaxArr = 0;//用来记录之前的最大的数组和
41         int A = arr.length;
42         int Location1=0;
43         int Location2=0;//用来记录子数组的最后一个位置
44         
45         int i;
46         
47 
48     /**核心算法,两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值
49         当并入的值为小于零的时候,就没必要进行继续的相加了,因为再加也不可能比后边单独
50         的数字大,所以,为负数就重新刷新位置,重置子数组的长度重新去找一个新的子数组**/
51         for ( i = 0; i < A; i++) {
52             Arr += arr[i];
53             if (Arr < 0) {
54                 Arr = 0;
55                 
56                 
57                 }
58             if (Arr > MaxArr) {
59                 MaxArr = Arr;
60                 Location2=i;
61                 ;
62                 }
63         }
64         
65         //用这个算法,通过最后的位置,和最大值来求出起始位置
66         for(i=Location2;i>=0;i--)
67         {
68             if(MaxArr-arr[i]==0)
69             {    
70                 Location1=i;//通过求出来的最大值和最后的那个位置,往前推移,找出起始位置
71                 break;//跳出循环
72             }
73             
74         }
75         /**这种情况的出现当且仅当全部的数字都为负数的时候,
76          对所有的数字求一个最大值就是最大子数组**/
77         if (MaxArr == 0) {
78             for ( i = 0; i < A; i++) {
79                 if (i == 0) {
80                     MaxArr = arr[i];
81                 }
82                 if (arr[i] > MaxArr) {
83                     MaxArr = arr[i];
84                 }
85             }
86         }
87         //***************
88         System.out.println("子数组的长度为"+(Location2-Location1+1));
89         System.out.println("子数组是由第    "+(Location1+1)+"   个数到第    "+(Location2+1)+"  个数组成");
90         System.out.println("最大子数组的和是   "+MaxArr);
91         
92     }
93 }

验证截图

转载于:https://www.cnblogs.com/sanzangtdashi/p/5363435.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL数据库默认latin1字符集转换为GBK或UTF8

可以采用下面的方法latin1字符集转换为gbk字符集或utf8字符集。具体的转换步骤如下&#xff1a;一、latin1转gbk1、导出数据库mysqldump --default-character-setlatin1 -h 数据库连接ip -u root -P 3306 -p数据库密码 db_name table_name > /usr/home/test/table_name.sql2…

【Post工具】PostMan 他媳妇 PostWoman

一个免费&#xff0c;快速&#xff0c;美观的API请求构建器&#xff0c;可以替代 Postman。 测试网址&#xff1a; https://postwoman.io/ 下载地址 https://github.com/liyasthomas/postwoman 主要特性&#xff1a; 支持自定义换肤支持权限支持参数、请求体支持 PWA支持历…

MYSQL统计和识别重复值

1、查询和计算表person_tbl中&#xff08;last_name&#xff0c;first_name&#xff09;组合有重复的记录的数量。mysql> SELECT COUNT (*) AS repetitions, last_name, first_nameFROM person_tbl GROUP BY last_name, first_nameHAVING repetitions > 1;2、从结果集中…

main spring启动_SpringBoot学习(一):为什么main方法启动类需要放在项目根目录...

一、概述使用SpringBoot的应用是需要将应用代码编译打包成jar包&#xff0c;然后基于main方法的方式来独立启动这个应用&#xff0c;使得该应用作为一个独立进程运行。这是跟传统的将项目打包成war包&#xff0c;然后部署到tomcat服务器去运行的一个区别。而在应用当中&#xf…

学习笔记~~~~LinkedHashMap

LinkedHashMap实现了Map接口&#xff0c;继承了HashMap 应用场景 HashMap是无序的&#xff0c;当我们希望有顺序地去存储key-value时&#xff0c;就需要使用LinkedHashMap了。 我们是按照7、2、3、4 的顺序插入的&#xff0c;但是输出结果并不是按照顺序的。 同样的数据&…

[转]Mysql Join语法解析与性能分析

转自&#xff1a;http://www.cnblogs.com/BeginMan/p/3754322.html 一&#xff0e;Join语法概述 join 用于多表中字段之间的联系&#xff0c;语法如下&#xff1a; ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表&#xff1b;table2:右表。 JOIN 按照…

css radial-gradient 径向渐变基本语法与使用

在之前的文章《深入理解Css linear-gradient线性渐变》我们了解了CSS中的线性渐变&#xff0c;本文将介绍CSS中的另一种渐变———径向渐变&#xff08;Radial Gradient&#xff09;&#xff1a; CSS中的径向渐变&#xff08;Radial Gradient&#xff09;允许你创建从一个颜色…

华为鸿蒙系统技术细节盘点

面对安卓的限制&#xff0c;华为似乎十分淡定从容&#xff0c;丝毫都不慌&#xff0c;华为的底气&#xff0c;很大原因来自华为自研的操作系统——鸿蒙系统&#xff01;鸿蒙系统刚提出来的时候就在各界媒体中炸开了花&#xff0c;花粉们对其关注程度也是只增不减&#xff0c;那…

spring boot2.x设置session有效时间_Spring 源码解析 Scopes 之 Request 、Session 、Application...

(给ImportNew加星标&#xff0c;提高Java技能)转自&#xff1a;开源中国&#xff0c;作者&#xff1a;麦克斯链接&#xff1a;my.oschina.net/wang5v/blog/3017934Request、Session、Application概念在这篇Spring源码解析-Singleton Scope(单例)和Prototype Scope(多例)博客中介…

学习笔记~~~~~TreeMap

TreeMap继承了AbstractMap类&#xff0c;实现了NavigableMap、Cloneable、Serializable 接口 TreeMap也是一个很常用的map实现类&#xff0c;因为他具有一个很大的特点就是会对Key进行排序&#xff0c;使用了TreeMap存储键值对&#xff0c;再使用iterator进行输出时&#xff0c…

程序员别再迷茫,赚钱,方法比你想的更多

每次打开公号&#xff0c;扑面而来一阵阵焦虑&#xff1a;95后毕业3个月就买房&#xff0c;你的同龄人正在抛弃你毕业3年&#xff0c;年薪超100万&#xff1a;赚钱&#xff0c;是一种修行一线城市财务自由门槛2.9亿&#xff0c;看看你还差多少说来说去就是&#xff0c;牛人跑得…

Mac 创建本地Mysql_2018-09-25:mac下创建本地数据库mysql

问题&#xff1a;如何在mac系统下&#xff0c;创建本地数据库mysql&#xff1f;过程&#xff1a;1.安装brew install mysql2.启动mysql过程中遇到的问题&#xff1a;(1)ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)解决过程&am…

.NET Core 学习资料精选:入门

开源跨平台的.NET Core&#xff0c;还没上车的赶紧的&#xff0c;来不及解释了……本系列文章&#xff0c;主要分享一些.NET Core比较优秀的社区资料和微软官方资料。我进行了知识点归类&#xff0c;让大家可以更清晰的学习.NET Core。首先感谢资料原作者的贡献。第一篇&#x…

学习笔记~~~~~Set接口实现

Java中提供了HashSet、TreeSet、LinkedHashSet三种常用的Set实现&#xff0c;以下具体分析它们的用法和性能。 我们使用Set的原因是Set集合不包含重复元素&#xff0c;HashSet、TreeSet和LinkedHashSet三种类型什么时候使用它们&#xff0c;使用哪个这是一个很重要的选择性问题…

15句乔布斯经典语录(中英文)

1.Life is brief, and then you die, you know&#xff1f;人生短暂&#xff0c;过着过着你就没了&#xff0c;明白么&#xff1f;2.Innovation distinguishes between a leader and a follower.领袖和跟风者的区别就在于创新。3.Were here to put a dent in the universe. Oth…

mysql一些常用操作_mysql的一些常用操作(一)

1.启动Mysql服务net start mysql2.进入mysql环境中&#xff0c;由于自己没有设置密码&#xff0c;直接回车进入即可(要将bin加入到环境变量path中)mysql -u root -p3.创建一个数据库create database db_test default character set utf8 collate utf8_general_ci;显示数据库&am…

关于程序员的脑筋急转弯(附答案)

1、程序猿最常去的是哪间酒吧&#xff1f;2、程序猿什么情况下会选择离职&#xff1f;3、0是假&#xff0c;1是真&#xff0c;请问这是真还是假&#xff1f;4、你怎样才能知道一个计算机科学家是内向还是外向的&#xff1f;5、为什么大部分Java程序员都是戴眼镜的&#xff1f;6…

怎么确保一个集合不能被修改

集合&#xff08;map,set,list&#xff09;都是引用类型&#xff0c;所以我们如果用final修饰的话&#xff0c;集合里面的内容还是可以修改的。 可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合&#xff0c;这样改变集合的任何操作都会抛…

以下十种性格的人不适合做程序员,你​赞同吗? ​

目录 1. 宁愿参加培训&#xff0c;也不愿意自学 2. 喜欢正常的上下班时间 3. 喜欢正常加薪而不是跳槽 4. 无法和同事和睦共处 5. 容易垂头丧气 6. 思想保守&#xff0c;不考虑他人建议 7. 不注重细节 8. 没有工作荣誉感 9. 不能做到三思而后行 10. 不喜欢极客类型的人 以下十种…

Iterator与ListIterator有什么区别

Iterator与ListIterator区别如下&#xff1a; 1、Iterator是ListIterator的父接口。 2、Iterator是单列集合(Collection)公共取出容器中元素的方式。 对于List&#xff0c;Set都通用。 而ListIterator是List集合的特有取出元素方式。 3、Iterator中具备的功能只有hashNext(),ne…