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

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

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

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

验证截图

求数组中的最小子数组,时间复杂度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. java冒泡排序算法

    /** * 冒泡排序算法:每次 * @author shaobn * @description 每次都会确定一个最大的值 即固定了,所以会每次-i; */ public class Test1 { p ...

  2. shp图层创建

    IField,IFieldEdit,IFields,IFieldsEdit,IGeometryDef,IGeometryDefEdit接口  (2013-05-06 20:40:27) 转载▼ 标签: ...

  3. 夺命雷公狗—angularjs—4—继承和修正继承

    angularjs 中也有继承的方法,废话不多说,看代码: <!doctype html> <html lang="en"> <head> &l ...

  4. java 网络编程(三)---TCP的基础级示例

    下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果 ...

  5. SQL2005中的事务与锁定(二)- 转载

    ------------------------------------------------------------------------ -- Author : HappyFlyStone  ...

  6. 数据库日期格式为int型时存取格式

    存入当前日期:time() 取出并转化为日期格式:date('Y-m-d H:i:s',strtotime($time)); 最好在前面加上这句: date_default_timezone_set( ...

  7. android 中的几种目录

    1. context.getExternalFilesDir()     ==> /sdcard/Android/data/<package_name>/files/ 一般放一些长时 ...

  8. View Properties [AX 2012]

    View Properties [AX 2012] Other Versions This topic has not yet been rated - Rate this topic Updated ...

  9. Linux下资源利用率监测利器—nmon使用

    最近接了一个任务,就是测试公司服务器的资源利用率,这样对每种业务平时所占资源有了大体的了解,进而为下一步的虚拟化做准备.找了很多开源的工具,但都不理想,有的安装很复杂,需要联网(而我们的服务器很多都不 ...

  10. python day6 面向对象

    把一个类变成具体的实例化的过程叫做类 实例化:把一个类变成一个具体对象的过程 __init__  构造函数,在实例化时初始化数据 __init__方法的第一个参数永远是self,表示创建的实例本身,因 ...