问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-05-12 07:20

我来回答

3个回答

热心网友 时间:2024-02-19 13:27

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 就失去其意义。
恳请您再费些脑力为我解答。非常感谢。

追答嗯,谢谢提醒。写的比较着急所以不太严谨。但是我想你应该明白我的思路了。你可以自己试试,我想这样才会有进步哦~

热心网友 时间:2024-02-19 13:28

不可能的!追问能否告诉我为什么不可能 ,有什么逻辑矛盾吗

追答逻辑矛盾是没有的,只不过要求O(N)谁也设计不出来

热心网友 时间:2024-02-19 13:28

我不知道,应该是不可能的!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高考560分能上211大学吗? - 知乎 河北高考多少分能上211大学 河北2023高考211分数线是多少? 考560分能上211大学吗河北 刀剑英雄合王者武器多少费用 刀剑英雄帝辰王者现在什么价位 2021年度工程施工合同范本 2021承包转让简单的合同范本 2021医院食堂承包合同范本 div+css+js实现菜单的收缩与展开 调用数据库内容的时候为什么内容字段... 拼多多的虎牌办公专卖店是正牌店吗 鬼家虎牌注册过商标吗?还有哪些分类可以注册? Java编程:你所知道的集合类都有哪些?主要方法? 虎牌保险柜为什么是两种商标 怎么样才能快速记住三字经? Java编程基础数组字符串集合 java编程n个集合每次从每个集合里面取出一个元素组成一个字符串列出所有组合算法 乐视电视X65突然就不显示图像,但有声音,想问一下大神们怎么解决,x65 Java面向对象编程:ArrayList集合 乐视x65只有声音,没有图像 Java集合编写 乐视x65看电视有电流声怎么处理 常年低烧是什么原因引起的 乐视X65电视机顶盒接AV声音断断续续怎么解决? 手机屏幕录视频是什么软件 经常低烧是什么原因? 医院检查过没的结果。引起低烧的原因有那些? 乐视65寸电视没有音频输出是什么模式? 频繁发低烧一般是什么原因 长期低烧是什么原因? 长期低烧是什么原因 java编程,急!将一个集合{1,16,5,20,77,36,66}进行由小到大的排序,最后输出结果. 推荐一个Java编程集合环境 湖南省岳阳市三调数据什么时候启用 三调数据库过国家质检时提示路面范围超出公路与铁路图斑范围,如何作用Arcgis? 对方被限制登录是什么意思? 先坐地铁再坐公交,可以享受换乘优惠吗?那反之呢? 各大站长们,你们常用的网站工具都有哪些? 我想收集一些网站在线的工具(什么方面的都可以),有谁知道能给我点吗? 如在线ps ht5h能组合出什么字? 将军HT5轮胎的胎噪 将军轮胎225/65r17 102h fr grab ht5怎么样? 比尔盖茨前世界首富 建立网校的条件是什么? 廖凯原的捐资 微软亚洲研究院的大事记 软件企业收入从哪儿来 POLO by 拉夫劳伦 为什么撤出中国市场? USPOLO 淮海太平洋专柜怎么样 南京哪里有polo Ralph Lauren 专柜 大陆那里有卖POLO、ARMANI、TOMMY这些牌子的专柜