求数组中的最小子数组,时间复杂度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
求数组中的最小子数组,时间复杂度o(n),java相关推荐
- java数组中怎么去重_java数组去重怎么弄???大神来解
[Java] 纯文本查看 复制代码public class TestDemo { public static void main(String[] args) { //10个整数{9,10,6,6,1 ...
- ios 替换数组中元素_ios可变数组的所有操作
#pragma mark 创建数组c NSMutableArray * array =[[NSMutableArray alloc] initWithObjects:@"a",@& ...
- 每天一道LeetCode-----在给定数组中找到一个子数组,使得这个子数组的元素乘积最大
Maximum Product Subarray 原题链接Maximum Product Subarray 在给定数组中找到一个子数组,使得这个子数组元素的乘积最大.给定数组中可能有正数,负数和0 思 ...
- 在一个数组中删除另一个数组存在的值
在一个数组中删除另一个数组存在的值 可以在购物车中删除多个商品的时候用此方法 在Vuex实现完整购物车中有涉及,详见 Vuex实现完整购物车 <script type="text/ja ...
- java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...
此类实现: 输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组. 并交换两个子数组的位置,保持子数组中的元素序号不变. 如:原数组为7,9,8,5,3,2 以下标3为分割点, ...
- java从数组中删除元素(数组的缩容)
java从数组中删除元素(数组的缩容) 1,解决方案一 /* * 数组的缩容(删除元素) * 第一种解决方案 * 移动元素,被删除元素后面的元素往前移一位 * 优点:不需要创建新数组,省内存,速度快 ...
- 将1-1000中所有12的倍数存到一个一维数组中,输出该数组和数的个数
将1-1000中所有12的倍数存到一个一维数组中,输出该数组和数的个数 #include<stdio.h>void main(){int i,j=0,a[100];for(i=1;i< ...
- JAVA剑指offer编程练习:二维数组中的查找(数组)
1.题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 【数据结构与算法】二维数组中的查找(剑指offer)java版
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析 ...
最新文章
- 机器学习实战第一步:特征选择与特征工程「附代码」
- 阿里云esc云服务器IP不能访问的解决办法
- Spring 中的编程思想总结
- Django模型层的多表操作(2)
- [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.16
- 信步漫谈之JDK—源码编译
- 高中数学知识那些和计算机有关系,2016高中数学知识点.doc
- 系统架构设计师 - ESB 企业服务总线
- 16MHz贴片晶振智能电子产品的好帮手
- linux信号量对mysql_MySQL 信号量semaphore 和 innodb_adaptive_hash_index
- CSS_css sprite原理优缺点及使用
- mac里python注释的快捷键_Mac 版的Python IDEL, 按什么快捷键可以快速显示上一条命令,下一条命令?...
- 私有化部署 给数据安全加把“锁”!
- ipad访问ftp文件服务器,ipad肿么访问ftp
- C# .Framework生成条形码
- python turtle库 简单图形-中国结
- LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)
- Team Provisioning Profile
- uniapp获取微信openid - 微信提现 - 登录授权 - AndroidStudio离线打包微信登陆
- 中国院士最多的县:共走出26位院士,百位高校校长,一万名教授