java非负数_java.——最大子序列和(前提是:全部都是非负数)

直接上代码吧:

情况一:全部是非负数整数的时候,其实非负实数处理也一样。

package Person;

import java.util.Scanner;

public class Main

{

public static final int maxn = 105;

public static int[] Arr = new int[maxn];

public static void main(String[] args)

{

int N;

Scanner cin = new Scanner(System.in);

N = cin.nextInt();

for(int i = 0 ; i < N ; i++)

{

Arr[i] = cin.nextInt();

}

int thissum,maxsum;

thissum = maxsum = 0;

for(int i = 0 ; i < N ; i++)

{

thissum += Arr[i];//向右累加

if(thissum > maxsum)

{

maxsum = thissum;//更新最大值

}

else if(thissum < 0)

{

thissum = 0;//若是小于零,则不可能是后面的部分和增大,抛弃它。

}

}

System.out.println(maxsum);

}

}

情况二:不确定里边的数是啥类型的。

从以下方面入手:

1.遍历一遍数组,如果全部是负数的时候,找出最大的负数,并把它输出来,结束程序,否则,进到下面的步骤。

2.思路和上面的一样。

代码实现如下:(假设所有的数均为整数)

package Person;

import java.util.Scanner;

public class Main

{

public static final int maxn = 105;

public static int[] Arr = new int[maxn];

public static void main(String[] args)

{

int N;

Scanner cin = new Scanner(System.in);

N = cin.nextInt();

int Max = 0;

for(int i = 0 ; i < N ; i++)

{

Arr[i] = cin.nextInt();

if(i == 0)

{

Max = Arr[i];

}

else

{

Max = Math.max(Max,Arr[i]);

}

}

if(Max < 0)

{

System.out.println(Max);

return;

}

//这个是分水岭。

int thissum,maxsum;

thissum = maxsum = 0;

for(int i = 0 ; i < N ; i++)

{

thissum += Arr[i];//向右累加

if(thissum > maxsum)

{

maxsum = thissum;//更新最大值

}

else if(thissum < 0)

{

thissum = 0;//若是小于零,则不可能是后面的部分和增大,抛弃它。

}

}

System.out.println(maxsum);

}

}

代码其实很简单的,如果有不明白的,随时可以留言,24小时在线,谢谢呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值