fork download
  1. def longest_subarray(arr):
  2. n = len(arr)
  3.  
  4. if n == 0:
  5. return None
  6.  
  7. prefix = [1] * n
  8. suffix = [1] * n
  9.  
  10. # Build prefix array (non-increasing)
  11. for i in range(1, n):
  12. if arr[i - 1] >= arr[i]:
  13. prefix[i] = prefix[i - 1] + 1
  14.  
  15. # Build suffix array (non-decreasing)
  16. for i in range(n - 2, -1, -1):
  17. if arr[i] <= arr[i + 1]:
  18. suffix[i] = suffix[i + 1] + 1
  19.  
  20. max_len = 0
  21. start = end = 0
  22.  
  23. # Find best center
  24. for i in range(n):
  25. curr = prefix[i] + suffix[i] - 1
  26. if curr > max_len:
  27. max_len = curr
  28. start = i - prefix[i] + 1
  29. end = i + suffix[i] - 1
  30.  
  31. return start, end, max_len, arr[start:end + 1]
  32. arr = [9,8,7,6,5,14,3,2,1,9,8,7,6,5,6,7,8,9,10,11,12,13,24,25,1]
  33. s, e, length, subarray = longest_subarray(arr)
  34.  
  35. print(s, e, length)
  36. print(subarray)
  37.  
Success #stdin #stdout 0.09s 14072KB
stdin
Standard input is empty
stdout
9 23 15
[9, 8, 7, 6, 5, 6, 7, 8, 9, 10, 11, 12, 13, 24, 25]