用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<Integer> lists = new ArrayList<Integer>();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>=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 < 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>=0){ System.out.println("你输入的是正数"); }else{ ...