子数组的最大累加和问题

子数组的最大累加和问题

http://www.nowcoder.com/questionTerminal/554aa508dd5d4fefbf0f86e5fe953abd

  • 既然是用动态规划,比较直观的思路是这样的:
    对于一个给定的数组arr[0...n-1].利用一个辅助的数组s[0...n-1]去存储数组arr中结尾下标为i的最大子数组。那么有
    if(s[i-1]<=0)  s[i] = arr[i];
    else s[i] = s[i-1]+arr[i];
    这样只需要在最后求s[i]的最大值即可。
  • 但是这样空间复杂度为O(n),为了满足题目要求,发现其实这个辅助的数组s[i]只与s[i-1],也就是我们循环的当前值有关,所以只需要用一个变量去存储这个值即可。最终代码如下:
    int maxsumofSubarray(int* arr, int arrLen ) {
      // write code here
      int cursor = arr[0];
      int max = cursor;
      for(int i=1;i<=arrLen-1;i++){
          if(cursor<=0) cursor = arr[i];
          else cursor = arr[i]+cursor;
          if(max<=cursor) max = cursor;
      }
      return max;
    }
全部评论

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务