石家庄铁道大学    信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的更多相关文章

  1. Problem N: 求二维数组中的鞍点【数组】

    Problem N: 求二维数组中的鞍点[数组] Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2764  Solved: 1728[Submit][S ...

  2. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  3. 剑指Offer 1. 二维数组中的查找 (数组)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  4. C#中怎么判断一个数组中是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  5. js 去除数组中的空值以及数组判断是否有重复数据

    1.判断是否有重复数据 function isRepeat(array){ var hash = {}; for(var i in array) { if(array[i]!="" ...

  6. 《剑指offer》数组中出现次数超过数组长度一半的数字

    题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...

  7. 数组中只出现一次的数字(java实现)

    问题描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 如果数组中只有一个数字出现奇数次,则将数组中所有的数字做异或可得该数字. 数组中有两 ...

  8. 【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现

    原创博文,转载请注明出处! # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...

  9. C#中判断一个数组中是否存在某个数组值 及相关

    声明:reference:http://www.cnblogs.com/icebutterfly/archive/2010/06/22/1762738.html:http://blog.csdn.ne ...

随机推荐

  1. hue安装与部署

    运行环境 centOS 6.6 hadoop 2.4.0 hive 1.2.0 spark 1.4.1 HUE 3.9 介绍: Hue是一个开源的Apache Hadoop UI系统,最早是由Clou ...

  2. java多线程实现卖票小程序

    package shb.java.demo; /** * 多线程测试卖票小程序. * @Package:shb.java.demo * @Description: * @author shaobn * ...

  3. oracle表分区

    注:新建分区表前要先准备好要用的表空间 一. oracle分区类型: 范围分区(Range分区) 列表分区(List分区) 散列分区(Hash分区) 组合分区(Composite Partitioni ...

  4. sklearn

    Feature extraction - sklearn文本特征提取 http://blog.csdn.net/pipisorry/article/details/41957763 http://sc ...

  5. yii2验证码的使用

    1.控制器中 public function actions()     {         return [             'captcha' => [               ...

  6. 关于陈冰、陈良乔以及《我的第一本C++书》【转】

    出处:如何在淘宝上卖出 600 本自己写的 C++ 入门书? 陈冰:<我的第一本C++书> 策划编辑,现为图灵公司副总编,<C程序设计伴侣>策划编辑 陈良乔:<我的第一本 ...

  7. C#抽象类及其方法的学习【转】

    转至 http://www.cnblogs.com/flyinthesky/archive/2008/06/18/1224774.html 在C#中使用关键字 abstract 来定义抽象类和抽象方法 ...

  8. python爬虫学习记录

    爬虫基础 urllib,urllib2,re都是python自带的模块 urllib,urllib2区别是urllib2可以接受一个Request类的实例来设置url请求的headers,即可以模拟浏 ...

  9. chrome调试找不到 XXXX.min.map 原因及解决办法

    什么是source map文件. source map文件是js文件压缩后,文件的变量名替换对应.变量所在位置等元信息数据文件,一般这种文件和min.js主文件放在同一个目录下. 比如压缩后原变量是m ...

  10. Linux按键驱动程序设计详解---从简单到不简单【转】

    转自:http://blog.csdn.net/coding__madman/article/details/51399353 版权声明:本文为博主原创文章,未经博主允许不得转载. 混杂设备驱动模型: ...