算法复习3——连续子数组的最大和
- 使用滑动窗口法:
重点:需要存储当前滑动窗口的和,如果<=0,就不需要在它的基础上加上当前值
public int FindGreatestSumOfSubArray(int[] array) { //滑动窗口法: if(array==null || array.length==0) return -1; int max=Integer.MIN_VALUE; //存储最大值,初始化为极小值 int tempSum=0; //当前滑动窗口的和 for(int i=0; imax) max=tempSum; } return max; }
- 易错点:(上面的tempSum就是此处的preSum),preSum的更新基于最大值,这种思路是错误的!!!
public int FindGreatestSumOfSubArray(int[] array) { //动态规划法 if(array==null || array.length==0) return -1; int preSum=0; //前一次的结果 int realSum=Integer.MIN_VALUE; //后一次的结果 for(int i=0; i
原因分析:最大和的更新基于上次的最大和,但是上次的最大和与array[i]之间不一定连续,也就是说直接相加可能会跳过中间的一些值。
【算法复习3——连续子数组的最大和】示例:数组[1,-5,5] 错误方案求出的最大和是6,实际结果应该是5
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 画解算法(1.|画解算法:1. 两数之和)