求数组中的最小子数组,时间复杂度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 ...
随机推荐
- opscenter dashboard排错
系统环境 opscenter 5.2 centOS 6.6 cassandra 2.0.x 问题 opscenter上的dashboard监控cassandra集群一段时间(大约1天)后总会停止显示. ...
- Android 播放视频文件
package com.example.myvideo2; import java.io.File; import android.app.Activity; import android.net.U ...
- 夺命雷公狗---linux之centos的安装
由于要玩node.js了,所以还是来复习下linux系统才行,所以夺命雷公狗分享两套安装linux的方法,这是centos的安装方法,,, 管理员默认帐号为:root,密码则是刚才您输入的那个...
- 收缩TempDB的办法(转载)
有时候在数据库上运行一个数据量很大的查询语句,会导致TempDB数据量剧增,具体查看下面链接文章: SqlServer 一个查询语句导致tempdb增大55G 找到TempDB剧增的问题后,接下来的问 ...
- jQuery触发<a>标签的点击事件后URL不跳转的解决办法
有HTML代码如下: <a id="workFrame" href="pages/work.html" target="FrameBox&quo ...
- Openstack的ping不通实例的解决办法
状态:实例在管理平台上正常创建,也能vnc到实例里面使用ifconfig,查看IP得到我们想要的IP,但是在除了计算节点以外的机器ping实例就是不通. 操作:主要为了测试网络51删除,重新创建网络5 ...
- Android的适配器
//====================ArrayAdapter=================================== public class List1 extends Ac ...
- rqnoj-342-最不听话的机器人-dp
dp[i][j][k][[l]: 执行第i步,执行到点(j,k),方向为l时,用的最大步数. 状态转移根据step[i]转移. #include<stdio.h> #include< ...
- [置顶] 1D1D动规优化初步
例题一: 货物运输,大意: 给出N个点的坐标与需要你送过去的钱数(第一个点不需要钱),身上带钱的数目有最大值,由初始在的1点,按顺序经历每个点(中途可以回1点,回去钱就满了),问最小走的路程是多少(最 ...
- 强制类型转换(const_cast)
[1] const_cast的作用 一.常量指针被转化成非常量指针,并且仍然指向原来的对象: 二.常量引用被转换成非常量引用,并且仍然指向原来的对象: 三.常量对象被转换成非常量对象. [2] 实例代 ...