一道笔试题:求数组元素和最大的子集
题目
昨天参加腾讯旗下某公司的笔试,其中唯一的算法题是这样的(大致描述):
某数组中有正数也有负数,相邻的一个或多个元素组成一个子集,求所有子集中元素和的最大值。
例如数组[-2, -4, 3, 5, -6, -3, 2, 4], 其子集和最大值为8,对应子集为[3, 5]
思路
第一反应是穷举,即列举所有长度从1到全集的所有子集的和,但是这肯定是效率很低的方法。
当时解题的思路就是分析人工计算时,会以何种方式进行:
- 从第一个元素开始往后累加,更新记录过程中的最大和
2.如果和为负,则抛弃前面的和,从后续元素开始重新累加
3.直到数组尾,得到最大值