python – MaxDoubleSliceSum算法
我正在尝试解决找到MaxDoubleSliceSum值的问题.简单来说,它是任何切片减去该切片中一个元素的最大总和(您必须删除一个元素,并且还要排除第一个和最后一个元素).因此,从技术上讲,数组的第一个和最后一个元素不能包含在任何切片总和中.
这是完整的描述: 给出了由N个整数组成的非空零索引数组A. 例如,数组A使得: A[0] = 3 A[1] = 2 A[2] = 6 A[3] = -1 A[4] = 4 A[5] = 5 A[6] = -1 A[7] = 2 包含以下示例双切片: 双切片(0,3,6),总和是2 6 4 5 = 17, 双切片(0,7),总和是2 6 4 5 – 1 = 16, 双切片(3,4,5),总和为0. 目标是找到任何双切片的最大总和. 写一个函数: 解决方案(一) 例如,给定: A[0] = 3 A[1] = 2 A[2] = 6 A[3] = -1 A[4] = 4 A[5] = 5 A[6] = -1 A[7] = 2 函数应该返回17,因为数组A的双片没有大于17的和. 假使,假设: N是[3..100,000]范围内的整数; 数组A的每个元素都是[-10,000..10,000]范围内的整数. 复杂: 预期的最坏情况时间复杂度是O(N); 预期的最坏情况空间复杂度是O(N),超出输入存储(不计入输入参数所需的存储). 可以修改输入数组的元素. 这是我的尝试: def solution(A): if len(A) <= 3: return 0 max_slice = 0 minimum = A[1] # assume the first element is the minimum max_end = -A[1] # and drop it from the slice for i in xrange(1,len(A)-1): if A[i] < minimum: # a new minimum found max_end += minimum # put back the false minimum minimum = A[i] # assign the new minimum to minimum max_end -= minimum # drop the new minimum out of the slice max_end = max(0,max_end + A[i]) max_slice = max(max_slice,max_end) return max_slice 是什么让我觉得这可能接近正确的解决方案,但问题的某些角落可能没有被覆盖是9个14个测试用例正确通过(https://codility.com/demo/results/demoAW7WPN-PCV/) 解决方法
这就是我编写算法的方法.
假设起始索引为X = 0,然后迭代地将正方形与右边相加. >在计算时跟踪最低int的索引,并在使用时从总和中减去最小的int.这有效地让你放置你的Y. 这怎么可能有所改善? 编辑(错误和解决方案):看来我的原始答案没有给我认为的问题带来什么新的东西,但我检查了错误,发现实际错误发生在这里:[ – 20,-10,10,-70,30,-30]将无法正确处理.它将排除正数10,因此它返回50而不是60. 看起来askers代码没有正确识别新的起始位置(我的方法在第4种情况下显示),重要的是你重新启动Y而不是Z的迭代,因为Y有效地删除了最小的数字,这可能是Z未通过测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 【python设计模式-创建型】建造者模式
- python调用新浪微博接口实现方法
- 在virtualenv中设置:`pip install -e .` vs`python setup.
- Python使用logging结合decorator模式实现优化日志输出的方法
- 是否有Python等效的Groovy / Grails for Java
- 分享一下Python数据分析常用的8款工具
- Python IDLE(python GUI)与python(comand line)有什么区别
- python – 在外部文件中存储unpicklabe pygame.Surface对象
- Python 文件读写操作实例详解
- python – 如何在PyCharm中格式化多行TODO注释?