您的位置:首页 > 编程语言

读书笔记之编程之美 - 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节的那几张图就不太正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: