读书笔记之编程之美 - 2.14 求数组的子数组之和的最大值
2010-08-18 22:08
281 查看
第一次遇到这个题是在Autodesk的笔试题,由于笔试时间比较短,当时只写了个大概思路。
当时我的想法是正负数问题,先从前扫描,把数组的值都加起来,如果某时的sum为负数,则可以丢弃之前的数据,从新开始计算。另外还要从后面进行计算,遇到sum为负数也要进行数据截断。现在看这个解法有个问题,就是数组全为负数的时候,找不到答案,还要补充一步,寻找最大的那个负数。
再看书上的解法,直接看代码清单2-27,nStart = max(A[i], nStart + A[i]),这句的意思就是判断数组后面的结果是否可以被丢弃。如果A[i] > nStart + A[i],也就是nStart < 0,即sum为负数就应该丢弃,从而nStart = A[i]重新开始。而nAll = max(nStart, nAll)则是保证前面的数可以被舍弃。
可以看出我的想法还是正确的,不过书上的解法更简洁。
今天去逛书店,发现这本书2010年5月已经第9次印刷了,书中的插图也更新了不少,但还是有错误,呵呵。比如2.10节的那几张图就不太正确。
当时我的想法是正负数问题,先从前扫描,把数组的值都加起来,如果某时的sum为负数,则可以丢弃之前的数据,从新开始计算。另外还要从后面进行计算,遇到sum为负数也要进行数据截断。现在看这个解法有个问题,就是数组全为负数的时候,找不到答案,还要补充一步,寻找最大的那个负数。
再看书上的解法,直接看代码清单2-27,nStart = max(A[i], nStart + A[i]),这句的意思就是判断数组后面的结果是否可以被丢弃。如果A[i] > nStart + A[i],也就是nStart < 0,即sum为负数就应该丢弃,从而nStart = A[i]重新开始。而nAll = max(nStart, nAll)则是保证前面的数可以被舍弃。
可以看出我的想法还是正确的,不过书上的解法更简洁。
今天去逛书店,发现这本书2010年5月已经第9次印刷了,书中的插图也更新了不少,但还是有错误,呵呵。比如2.10节的那几张图就不太正确。
相关文章推荐
- 【编程之美】2.14 求数组的子数组之和的最大值
- 【编程之美】读书笔记:求数组的子数组之和的最大值
- 编程之美-2.14 求数组的子数组之和的最大值
- 【编程之美】读书笔记:寻找数组中的最大值和最小值
- [编程之美] PSet2.14 求数组的子数组之和的最大值
- 读书笔记之编程之美 - 2.15 子数组之和的最大值(二维)
- 编程之美 2.14 数组的子数组之和的最大值 扩展题2
- 编程之美 2.14 求数组的子数组之和的最大值
- 读书笔记之编程之美 - 2.13 子数组的最大乘积
- 编程之美-2.14-求数组的子数组之和的最大值
- 读书笔记之编程之美 - 2.10 寻找数组中的最大值和最小值
- [编程之美] 2.14 求数组的子数组之和的最大值
- 结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)
- 编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
- 编程之美:2.14 求数组的子数组之和的最大值和最小值(动态规划)
- 读书笔记之编程之美 - 3.8 求二叉树中节点的最大距离
- 程序员编程艺术:第七章、求连续子数组的最大和
- 编程之美之子数组的最大值
- 编程之美2.14求数组的子数组之和的最大值Java版
- 程序员编程艺术:第七章、求连续子数组的最大和