连续子数组的最大和

£神魔★判官ぃ 2022-06-09 03:37 260阅读 0赞

虽然在剑指offer上看到过,在真正做这道题的时候才发现自己的不足
在线判题传送门:
点这里
题目:
一个数组有 N 个元素,求连续子数组的最大和。
例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3。
思路在代码里:

  1. public class MaxSumInArray {
  2. public static void main(String[] args) {
  3. // 0 1 2 3 4 5 6 7 8 9
  4. int a[]={
  5. 1,-2,3,10,-4,7,2,-19,2};
  6. // 8 10 11 2 12
  7. int result = getMax(a);
  8. System.out.println(result);
  9. }
  10. //当和为正数时,temp继续往下加 因为就算加上负数,负数之后的正数也可能,弥补之前负数的损失
  11. //比如 3 -1 6
  12. //和 3 2 8
  13. //但是会出现 加上的负数比较大的情况;所以要去掉这次的和 重新开始
  14. //比如 3 -5 9
  15. //和 3 -2 7 你会发现加上 -2 还不如重新开始一行呢
  16. //所以判定 和为负数的时候temp重新开始
  17. public static int getMax(int[] a) {
  18. int max= a[0];
  19. int start=0;
  20. int end=0;
  21. int temp=max; //用于保存某次的和
  22. int s =0;
  23. for(int i=1;i<a.length;i++){
  24. if(temp>0){
  25. temp+=a[i];
  26. }else{
  27. temp=a[i];
  28. s=i; //记录新开始的s,在满足temp》max时才进行交换
  29. }
  30. if(temp>max){
  31. max=temp;
  32. start=s;
  33. end=i;
  34. }
  35. }
  36. System.out.println(start+" "+end);
  37. return max;
  38. }
  39. }

发表评论

表情:
评论列表 (有 0 条评论,260人围观)

还没有评论,来说两句吧...

相关阅读

    相关 连续

    HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。

    相关 连续

    最大连续子数组和 1. 题目描述 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有

    相关 连续

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候

    相关 连续

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候