子数组的最大和(较难)
最大和的子数组
http://www.nowcoder.com/questionTerminal/32139c198be041feb3bb2ea8bc4dbb01
import java.util.*;
public class Solution {
/**
*
* @param A int整型一维数组
* @return int整型
*/
public int maxSubArray (int[] A) {
if(A == null || A.length == 0)
return 0;
int res = A[0];
int max = A[0];
for(int i = 1;i < A.length;i ++){
max = Math.max(max + A[i],A[i]);
res = Math.max(max,res);
}
return res;
}
}刚开始是没有头绪的,因为题目都看不懂,后来搜了一下才知道子数组的意思,然后,还是没有头绪。在借鉴之后,发现可以使用Math.max这个函数。首先,max是从第一个元素到第i个元素的和与第i个元素的大小比较,很巧妙,如果第i个元素大于1到i个数的和,那么max就等于第i个元素的值,也就是说子数组的起点就由第i个元素开始了,反之则继续循环。res是记录最大的和,一直都是res与max相比较,max一直在变化,而res永远是一直最大的那一个,比较巧妙,需要慢慢消化。
查看17道真题和解析
基恩士成长空间 423人发布