今天做的笔试的算法题。。。泪目啊
来源:互联网 发布:黑科技和人工智能 编辑:程序博客网 时间:2024/06/11 08:44
今天做的笔试的算法题。。。泪目啊
又一次被恒生的笔试捏哭。。。T_T||
算法真是头疼。找一个数组的最大和的连续子数组(时间复杂度 O(n)),当时快交卷了,随便一想感觉是找到负数后,再向两边找更多的正数。太2了。不过第一感觉是要不断求和比较,其实在想一下就和答案连接上了。时间不够的伤啊。。。果然直觉是最对的。
这里贴上原帖的正确解法,一看才发现这题只是把原来的查找一个数变成了查找sum而已,嗯,果然脑子锈掉了。。。
下面是转载的一段算法思路(说的有点绕):
由于数组中的元素可能是正负,所以连续的子组求和,会变大也可能变小,解题时首先要求当前的和(初始值为0)和下一个元素求和后,如果是负的,那么重新置0和下下个继续求和,首先要找到使和增加的正的元素。然后有了当前最大的和后,纪录下来;继续累加求和,若新增的元素使和变为负数,那么重新置0,按这个逻辑找出剩余元素的一个最大子组和,若超过前纪录,覆盖,直到子组遍历结束。
public class FindMaxSumOfSubArray {public static void main(String[] args) { FindMaxSumOfSubArray f = new FindMaxSumOfSubArray(); int[] arr = { 1, -2, 3, 10, -4, 7, 2, -5 }; System.out.println("MaxSum:" + f.findMaxSum(arr));}public Integer findMaxSum(int[] arr) { int curSum = 0; int maxSum = 0; int len = arr.length; if (arr == null || len == 0) { return null; } for (int i = 0; i < len; i++) { curSum += arr[i]; if (curSum < 0) { curSum = 0; } if (curSum > maxSum) { maxSum = curSum; } } // all data are negative if (maxSum == 0) { for (int i = 0; i < len; i++) { if (i == 0) { maxSum = arr[i]; } if (arr[i] > maxSum) { maxSum = arr[i]; } } } return maxSum;}
}
看完代码想撞墙,不就是把找最大值变成了找最大和吗,curSum换成temp,maxSum换成max,ohno。。。计算机二级的基础题
附上原帖地址:(http://blog.csdn.net/hpf911/article/details/9275583 )
END and DEAD———-
0 0
- 今天做的笔试的算法题。。。泪目啊
- 今天笔试的一道算法题,每次都吃后悔药,痛苦!
- 今天的Java笔试题
- 今天遇到的笔试题
- 今天的淘宝笔试题
- 今天去面试某公司的.net笔试题(答案自己做的,大家多指教)
- 今天的笔试
- 今天Gameloft的笔试
- 今天笔试的几道题
- 自己做的笔试题
- 今天笔试时候所遇到的题
- 今天做的很好!
- 今天做的MTV
- 今天做的决定
- 今天做的很好!
- 今天做的事情
- 今天做的事情
- 今天做的事
- struts2+jqury ajax问题汇总与解决办法
- jsp中jstl标签的类似 if - else 语句 的语法
- 插入一条id自增记录返回自增后的id
- OKHttp访问网络
- [精编][转]do{}while(0)宏详解
- 今天做的笔试的算法题。。。泪目啊
- Android 开发 之 JNI入门 - NDK从入门到精通
- 交叉熵代价函数
- Android 开发注意事项
- Rexxaar android笔记
- 恐龙技术生存体验(二 初出茅庐)
- 深度学习(二十四)矩阵分解之基于k-means的特征表达学习
- iOS CoreAnimation详解和使用
- 欢迎使用CSDN-markdown编辑器