-
打开我的题库,调为简单难度。
-
计算最大子数,直接给我难住。
-
报错铺满屏幕,凝望没有思路。
-
缝缝补补做出,击败零个用户。
-
翻阅评论找补,令我勃然大怒。
-
打开思维第一步,编写代码求数组,
-
没有现成的道路,不服就干纸老虎。
-
为什么要去看每个元素加进来会对当前的子数组造成什么影响?
-
咱们学会反向思维,看看前面的子数组对当前元素造成什么影响。
-
若前面的子数组 加上 当前元素 后,值比当前元素小,说明前面的子数组太拉胯,一定是负数,拖了当前元素后腿,要不得。那咱就从这里重新起个头。
-
若前面的子数组 加上 当前元素 后,值比当前元素大,说明这个子数组做了贡献,要的,带上当前元素一起玩。
-
还有一点小问题,当前元素是负数,前面的子数组是正数,根据上面的规则,子数组仍然是有贡献,加上去后变小了。
-
解决方法很简单,记录中间产生的max。
-
class Solution { public: int maxSubArray(vector<int>& nums) { int res = nums[0]; int i = 1; int max =res; while(i<nums.size()) { if(res + nums[i] <= nums[i]) { res = nums[i]; } else { res += nums[i]; } max = res>max?res:max; i++; } return max; } };
算法有点拉胯,成绩还算勉强,内功需要加强,还望高人指点。