输入一个整形数组(元素可能为正为负),求数组中连续的子数组使其和最大,打印出子数组
思路:这道题主要要明白两个点,第一,需要设置一个变量max保存当前的最大值,另外一个变量sum记录不断增加元素之后的总和
第二,如果sum+array[i]>0,sum=sum+array[i],否则就是sum=array[i]。因为如果一个新元素加上之后使得sum<0,说明当前和最大的子数组只能到该元素之前,但如果即使 新加上的元素小于0,加上之后sum变小,但sum>0,这样仍存在加上后边的元素取得更大值得可能,主要通过判断当sum>max时,max=sum
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
String[] str=line.split(" ");
int n=str.length;
int[] array=new int[n];
for(int i=0;i
max){
start=i;
}
}else{
sum+=array[i];
}
if(sum>max){
max=sum;
end=i;
}
}
int[] result=new int[end-start+1];
int k=0;
for(int j=start;j<=end;j++){
result[k]=array[j];
k++;
}
return result;
}
}
输入:2 -3 4 7 -10 6
输出:4 7
输入:-9 -8 -7 -3 -5
输出:-3