当前位置:   article > 正文

大疆机器学习笔试算法题_大疆雷达算法题

大疆雷达算法题
给定一个数组a[0...n-1],求a[j]-a[i]+a[q]-a[p]的最大值,其中i<j<p<q

  1. #一个数组a[0...n-1],求a[j]-a[i]+a[q]-a[p]的最大值,其中i<j<p<q
  2. #算法解析:借鉴a[j]-a[i]的最大值,先把数组分为两段,每一段按单独算法执行,也就是先把该段
  3. #前面一截的最小值找出,后面一截的最大值找出。然后算出最大值,同理算出第二段最大值,相加得赋值为
  4. #max,如果更大则替换。
  5. def getmax(array):
  6. arrlen=len(array)-1
  7. arraymax = [-100000] #这里赋初值时要尽可能的小,以防max-min是小于0的一些数而导致没记录。
  8. for i in range(1,arrlen+1):
  9. prearray=array[:i]
  10. endarray=array[i:]
  11. prelen=len(prearray)
  12. endlen=len(endarray)
  13. #每次重新循环时都会被初始化,必须在for循环外部加一个存储空间,防止最大值被初始化。
  14. min = prearray[0]
  15. max = endarray[0]
  16. if max-min>arraymax[0]:
  17. arraymax[0]=max-min
  18. for i in range(prelen):
  19. if array[i]<min:
  20. min=array[i]
  21. for i in range(endlen):
  22. if array[i]>max:
  23. max=array[i]
  24. return arraymax[0]
  25. if __name__ == '__main__':
  26. array=[1,2,3,9,6,4,2,1]
  27. slen=len(array)-2
  28. max1 = 0
  29. max2 = 0
  30. totalmax = max1 + max2
  31. for i in range(2,slen+1):
  32. array1=array[0:i]
  33. array2=array[i:]
  34. max1=getmax(array1)
  35. max2=getmax(array2)
  36. totalmax = max1+max2
  37. if max1+max2>totalmax:
  38. totalmax=max1+max2
  39. print(totalmax)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/994113
推荐阅读
相关标签
  

闽ICP备14008679号