求数组中的最小子数组,时间复杂度o(n),java
- 石家庄铁道大学 信1405-1 班 唐炳辉
题目:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
设计思路:两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值,当并入的值为小于零的时候,就没必要进行继续的相加了,因为再加也不可能比后边单独的数字大,所以,为负数就重新刷新位置,重置子数组的长度重新去找一个新的子数组
- //石家庄铁道大学 信1405-1 班 唐炳辉:三藏
- /**给定一个数组,求出这个数组中子数组的最大值,求出,要求时间复杂度为O(n)**/
- package java_ketang;
- import java.util.Scanner;
- public class MinArray {
- public static void main(String[] args) {
- MinArray f = new MinArray();
- //用户自己定义数组的长度并 自行输入一串数组
- Scanner in=new Scanner(System.in);
- System.out.print("请输入数组长度:");
- int flase0g=in.nextInt();
- //输入数组中的各个数值
- System.out.print("请依次输入整数:");
- int Arr[]=new int[flase0g];
- for(int i=0;i<flase0g;i++)
- {
- Arr[i]=in.nextInt();
- }
- //输出用户输入的数组
- System.out.print("您输入的数组为 ");
- for(int i=0;i<flase0g;i++)
- {
- System.out.print(Arr[i]+" ") ;
- }
- //输出最后的结果
- f.findMaxArr(Arr);
- }
- public void findMaxArr(int[] arr) {
- int Arr = 0;//用来记录当前并入的数组的和
- int MaxArr = 0;//用来记录之前的最大的数组和
- int A = arr.length;
- int Location1=0;
- int Location2=0;//用来记录子数组的最后一个位置
- int i;
- /**核心算法,两个变量 ,一个记录当前并入的数组的值,另外一个记录所算过得最大的数组的值
- 当并入的值为小于零的时候,就没必要进行继续的相加了,因为再加也不可能比后边单独
- 的数字大,所以,为负数就重新刷新位置,重置子数组的长度重新去找一个新的子数组**/
- for ( i = 0; i < A; i++) {
- Arr += arr[i];
- if (Arr < 0) {
- Arr = 0;
- }
- if (Arr > MaxArr) {
- MaxArr = Arr;
- Location2=i;
- ;
- }
- }
- //用这个算法,通过最后的位置,和最大值来求出起始位置
- for(i=Location2;i>=0;i--)
- {
- if(MaxArr-arr[i]==0)
- {
- Location1=i;//通过求出来的最大值和最后的那个位置,往前推移,找出起始位置
- break;//跳出循环
- }
- }
- /**这种情况的出现当且仅当全部的数字都为负数的时候,
- 对所有的数字求一个最大值就是最大子数组**/
- if (MaxArr == 0) {
- for ( i = 0; i < A; i++) {
- if (i == 0) {
- MaxArr = arr[i];
- }
- if (arr[i] > MaxArr) {
- MaxArr = arr[i];
- }
- }
- }
- //***************
- System.out.println("子数组的长度为"+(Location2-Location1+1));
- System.out.println("子数组是由第 "+(Location1+1)+" 个数到第 "+(Location2+1)+" 个数组成");
- System.out.println("最大子数组的和是 "+MaxArr);
- }
- }
验证截图
求数组中的最小子数组,时间复杂度o(n),java的更多相关文章
- Problem N: 求二维数组中的鞍点【数组】
Problem N: 求二维数组中的鞍点[数组] Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2764 Solved: 1728[Submit][S ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- 剑指Offer 1. 二维数组中的查找 (数组)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- C#中怎么判断一个数组中是否存在某个数组值
(1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...
- js 去除数组中的空值以及数组判断是否有重复数据
1.判断是否有重复数据 function isRepeat(array){ var hash = {}; for(var i in array) { if(array[i]!="" ...
- 《剑指offer》数组中出现次数超过数组长度一半的数字
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- 数组中只出现一次的数字(java实现)
问题描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 如果数组中只有一个数字出现奇数次,则将数组中所有的数字做异或可得该数字. 数组中有两 ...
- 【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现
原创博文,转载请注明出处! # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...
- C#中判断一个数组中是否存在某个数组值 及相关
声明:reference:http://www.cnblogs.com/icebutterfly/archive/2010/06/22/1762738.html:http://blog.csdn.ne ...
随机推荐
- java冒泡排序算法
/** * 冒泡排序算法:每次 * @author shaobn * @description 每次都会确定一个最大的值 即固定了,所以会每次-i; */ public class Test1 { p ...
- shp图层创建
IField,IFieldEdit,IFields,IFieldsEdit,IGeometryDef,IGeometryDefEdit接口 (2013-05-06 20:40:27) 转载▼ 标签: ...
- 夺命雷公狗—angularjs—4—继承和修正继承
angularjs 中也有继承的方法,废话不多说,看代码: <!doctype html> <html lang="en"> <head> &l ...
- java 网络编程(三)---TCP的基础级示例
下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果 ...
- SQL2005中的事务与锁定(二)- 转载
------------------------------------------------------------------------ -- Author : HappyFlyStone ...
- 数据库日期格式为int型时存取格式
存入当前日期:time() 取出并转化为日期格式:date('Y-m-d H:i:s',strtotime($time)); 最好在前面加上这句: date_default_timezone_set( ...
- android 中的几种目录
1. context.getExternalFilesDir() ==> /sdcard/Android/data/<package_name>/files/ 一般放一些长时 ...
- View Properties [AX 2012]
View Properties [AX 2012] Other Versions This topic has not yet been rated - Rate this topic Updated ...
- Linux下资源利用率监测利器—nmon使用
最近接了一个任务,就是测试公司服务器的资源利用率,这样对每种业务平时所占资源有了大体的了解,进而为下一步的虚拟化做准备.找了很多开源的工具,但都不理想,有的安装很复杂,需要联网(而我们的服务器很多都不 ...
- python day6 面向对象
把一个类变成具体的实例化的过程叫做类 实例化:把一个类变成一个具体对象的过程 __init__ 构造函数,在实例化时初始化数据 __init__方法的第一个参数永远是self,表示创建的实例本身,因 ...