打开我的题库,调为简单难度。
计算最大子数,直接给我难住。
报错铺满屏幕,凝望没有思路。
缝缝补补做出,击败零个用户。
翻阅评论找补,令我勃然大怒。

打开思维第一步,编写代码求数组,
没有现成的道路,不服就干纸老虎。
为什么要去看每个元素加进来会对当前的子数组造成什么影响?
咱们学会反向思维,看看前面的子数组对当前元素造成什么影响。
若前面的子数组 加上 当前元素 后,值比当前元素小,说明前面的子数组太拉胯,一定是负数,拖了当前元素后腿,要不得。那咱就从这里重新起个头。
若前面的子数组 加上 当前元素 后,值比当前元素大,说明这个子数组做了贡献,要的,带上当前元素一起玩。
还有一点小问题,当前元素是负数,前面的子数组是正数,根据上面的规则,子数组仍然是有贡献,加上去后变小了。
解决方法很简单,记录中间产生的max。
class Solution {
public:int maxSubArray(vector& nums){int res = nums[0];int i = 1;int max =res;while(imax?res:max;i++;}return max;}
}; 算法有点拉胯,成绩还算勉强,内功需要加强,还望高人指点。
上一篇:带跌眼的成语有哪些
下一篇:柒个我,人格莫晓娜变态不,你们说