问答文章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

我不知道,应该是不可能的!
java输入若干个数(包含正数和负数)以0表示输入结束,输出它们中所有正数...

import java.util.Scanner;public class Testadd { public static void main(String[] args) { int count=0;int max = 0;//创建Scanner对象 //System.in表示标准化输出,也就是键盘输出 Scanner sc = new Scanner(System.in);//利用hasNextXXX()判断是否还有下一输入项 while (sc.hasNext()) ...

JAVA程序输入10个数字,输出所有负数及负数的和

输入10个数字,输出所有负数及负数的和的代码如下图:public static void main(String[] args) { List&lt;Integer&gt; lists = new ArrayList&lt;Integer&gt;();lists.add(12);lists.add(-1);lists.add(-2);lists.add(-12);lists.add(120);lists.add(121);lists.add(-112);lists.add(12);lists.add(...

加分哦~编写一个java程序,输入五个数字,判断并输出其中负数,正数和0...

} } system.out.println("其中负数有:"+count1+"个");system.out.println("其中零有:"+count2+"个");system.out.println("其中正数有:"+count3+"个");

求编一个Java程序:从键盘输入10个数,统计其中的正数、负数和零的个数...

input.close();System.out.println("正数个数为"+b+"负数个数为"+c+"0的个数为"+a);} }

采用java语言编写一个计算器,该计算器能对正数、负数(这里的正数、负数...

double first=0,second=0,result=0;//用于保存第一个数,第二个数和计算结果 double push;//用于标识是否有数字键按下 public void actionPerformed(ActionEvent e) { if(e.getSource()==b3) {tf1.setText("0."); num=0; dot=0; push=0; flag=0; first=0;} else if(e.getSource()==b4) ...

用JAVA编写一程序:从键盘输入多个字符串到程序中,并将它们按逆序输出在...

import java.util.Scanner;public class ScannerDemo{ public static void main(String[] args) throws Exception{ Scanner scan=new Scanner(System.in);System.out.println("请输入内容:");String str=scan.nextLine();char[] s=str.toCharArray();for(int i=s.length-1;i&gt;=0;i--){ System...

Java编程,输入n和相应的n个数,统计输出n个数中负数、零和正数的个数...

import java.util.Scanner;public class test { public static void main(String[] args) { Scanner sc = new Scanner(System.in);System.out.println("请输入要统计数据的个数,n=");int n = sc.nextInt();int sum_zero = 0;int sum_positive = 0;int sum_negative = 0;int temp = ...

java的一个程序如下,输出结果为什么为—127呢?为什么是负数呢?怎么算出...

byte范围 -128~127之间。当数字为127的时候,不溢出,相当于最大的127。128的时候,溢出,相当于最小的负数,也就是-128。所以,129就是-127

用java语言解答输入10个整数,统计其中的正数,负数和零的个数

public static void main(String[]args){ Scanner sc = new Scanner(System.in);System.out.println("请输入10个整数");String[]s = new String[10];String regex = "(-?\\d+)";int[]arr = new int[10];int a,b,c;a = b = c = 0;for (int i = 0;i &lt; 10;i++){ s[i...

java试编写一程序,可由键盘输入一个整数,然后判断该数值是正数还是负数...

import java.util.Scanner; public class TestJT { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入整数"); int input= sc.nextInt(); if(input&gt;=0){ System.out.println("你输入的是正数"); }else{ ...

java入门编程 java编程软件有哪些 java集合排序 java map集合 java编程题 java编程思想 java基础编程题 java集合详解 java 集合类
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求游戏《寂静岭》中好听的游戏配乐,最好是纯音乐 A8 6500 最高支持什么显卡 加条内存组成双通道 对游戏有多大提升... ...追了四个多月了、她也喜欢我。我们俩个在一起也上了床…但是我是... 和喜欢7年的女孩表白后女生说给她点时间,但是又没说什么时间回复我。她... 说一个人很有气质`是什么样的呢` 邢台周边地区的苹果是什么价格 太行百果园地址在哪里? ...时最后香的形状是两边低中间高,这代表什么意思呀?麻烦知..._百度知... 染色体的组成为( )A.DNA和蛋白质B.蛋白质和糖类C.基因和蛋白质D.基 ... 监控器被接入后黑屏的原因 拼多多的虎牌办公专卖店是正牌店吗 鬼家虎牌注册过商标吗?还有哪些分类可以注册? 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这些牌子的专柜