Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        5年前关闭。
                                                                                            
                
        
我是python的新手,我遇到了这个特定的代码片段,以计算序列中最大的片段,但是我似乎无法理解以下代码

best = A[0]
for size in range(1,n+1):
   cur = sum(A[:size])
   for i in range(n-size):
      cur += A[i+size] -= A[i] # <- what happens here?
      best = max(best, cur)


关于代码如何运行的任何想法,尤其是关于该行的想法,都将有所帮助!

最佳答案

首先,代码中的错误是额外的=。工作代码:

n = len(A)
best = A[0]
for size in range(1,n+1):
   cur = sum(A[:size])
   for i in range(n-size):
      cur += A[i+size] - A[i] # <- what happens here?
      best = max(best, cur)


外部的for循环创建越来越大的切片,首先将size设置为1。然后将cur设置为size的前A个项的总和。

在内部循环中,通过将值恰好添加到切片的右边(A[i+size])并减去切片的第一个值(A[i]),可以将该切片“向右移动”。

最后,将best设置为新计算出的总和和迄今为止找到的最大值中较大的一个。

最后,best包含最大的和。除非A包含负值,否则答案很简单:sum(A)

编辑:我只是注意到有一个错误:除了切片大小1(best = A[0]),最左边的切片不计算在内。因此,如果A = [4, 3, 2]则输出5而不是9。通过在内部for循环上方添加best = max(best, cur)行来进行修复。

关于python - 该语句块在Python中究竟做什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10582331/

10-13 03:25