用java编程:输入一个集合,可以有正数有负数,写一个程序 输出集合内所有数值的和最小的连续子集有一组数

例如:有一组数据{1,-2,0,9,123}有正有负,求找出其中连续的子集中和最小的,如{1,-2,0}和-1是最小的,并要求时间复杂度为O(n)。... 例如:有一组数据{1,-2,0,9,123}有正有负,求找出其中连续的子集中和最小的,如{1,-2,0}和-1是最小的,并要求时间复杂度为O(n)。 展开
 我来答
1雨2打3琵4琶
2013-09-22 · 超过20用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:38.6万
展开全部
package com.arc.test;

public class MiniArrayTest {


public static void main(String[] args) {
int[] arr = {-15, 3, 3, -20, 1, -4};
getMiniArray(arr);
}

public static void getMiniArray(int[] arr){

int startIndex = 0;
int endIndex = 0;
int temp = Integer.MAX_VALUE;
int min = 0;

// 如果数组长度为1或2,则最小的连续子集就是自己
if(arr.length <= 2){
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i] + ",");
}
return;
}

// 用index标注出现负数的数组下标,依次比较结果,index将停留在数值最小的地方
// 此时,时间复杂度是O(n)
for(int i = 0; i < arr.length; i++){
if(arr[i] < 0){
min += arr[i];
if(min <= temp){
startIndex = endIndex;
endIndex = i;
temp = min;
min = arr[endIndex];
}
}else{
min += arr[i];
}
}

// 如果endIndex > 0,说明数组中有负数,则把startIndex和endIndex之前的元素打印出来
// 这里,最大时间复杂度(n)
// 所以,总的时间复杂度2O(n),也可以当作O(n)
if(endIndex > 0){
if(startIndex == 0){
for(int i = startIndex; i <= endIndex; i++){
System.out.print(arr[i] + ",");
}
}
// 如果endIndex = 0,说明数组中没有负数,则把连续的最小的两个整数输出,就是最小连续子集合
// 这里,最大时间复杂度(n)
// 所以,总的时间复杂度2O(n),也可以当作O(n)
}else{
endIndex = 1;
min = arr[0] + arr[1];
for(int i = 2; i < arr.length; i++){
if(arr[i - 1] + arr[i] <= min){
min = arr[i] + arr[i - 1];
endIndex = i - 1;
}
}
System.out.println(arr[endIndex - 1] + "," + arr[endIndex]);
}
}
}
追问
非常感谢你的回答,虽然在你设置的数组实验时  答案是正确的 但是 我认为28行起到40行

有些逻辑错误,因为当我置换数组为arr【-1,3,3,-2,1,-4】时 程序就有错误,而且temp 就失去其意义。
恳请您再费些脑力为我解答。非常感谢。
追答
嗯,谢谢提醒。写的比较着急所以不太严谨。但是我想你应该明白我的思路了。你可以自己试试,我想这样才会有进步哦~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
video0000
2013-09-19 · TA获得超过349个赞
知道小有建树答主
回答量:445
采纳率:100%
帮助的人:253万
展开全部
不可能的!
追问
能否告诉我为什么不可能  ,有什么逻辑矛盾吗
追答
逻辑矛盾是没有的,只不过要求O(N)谁也设计不出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
留产能居室内
2013-09-19
知道答主
回答量:37
采纳率:0%
帮助的人:11.5万
展开全部
我不知道,应该是不可能的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式