打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python 数列
最近有道面试题很流行:
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a+a[i+1]+…+a[j]的子段和的最大值
贴个Python解法:
                      
getMax是最简单直观的两层循环穷举
getMax2是动态规划算法: #!/usr/bin/python
import sys
def getMax(array):
  maxV=None;
  maxL=[]
  start = 0
  end = 0
  for n in range(len(array)):
    l=[]
    v=0
    for i in array[n:]:
      l=l[:]
      l.append(i)
      v=v+i
      if(v>maxV or maxV==None):
        maxV=v
        maxL=l
        start = n
        end = n+array[n:].index(i)
  print("Start: %s, End: %s" % (start, end))
  print(maxV)
def getMax2(array):
  tempSum = None
  Sum = None
  start = 0
  end = 0
  tempStart = 0
  for n in range(len(array)):
    if tempSum>0 or tempSum>array[n]:
      tempSum = tempSum+array[n]
    else:
      tempSum = array[n]
      tempStart = n
    if tempSum>Sum:
      start = tempStart
      Sum=tempSum
      end = n
  #print(array[start:end+1])
  print("Start: %s, End: %s" % (start, end))
  print(Sum)
if __name__=="__main__":
  getMax([int(x) for x in sys.argv[1].split(",")])
 
测试脚本:

#!/usr/bin/python
import random
import sys
import time
from getMax import *
def getRandomList(num):
  if not num:
   length = random.randint(1,1000)
  else:
   length = num
  l=[]
  for i in range(length):
    l.append(random.randint(-1000000,1000000))
  return l

if __name__=="__main__":
  for i in range(10):
    l = getRandomList(None)
    print("")
    print("********")
    print("Length of test data: %s" % len(l))
    print("Method: getMax")
    start=time.time()
    getMax(l)
    print("Used time: %s" % (time.time()-start))
    print("")
    print("Method: getMax2")
    start=time.time()
    getMax2(l)
    print("Used time: %s" % (time.time()-start))
 
 
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/1030/26833.php
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python初学者-输入一个数判断奇偶性
对比 Python 原生切片,讲述 Numpy 数组切片!
数据库主从监控脚本,数据传到influxdb
很多人现在还不知道的知识点,Python多进程和多线程详解!
Python多线程threading
python并发编程:使用多进程multiprocessing模块加速程序的运行
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服