题目

山形数组定义如下:
一维数组,数组元素从左到右逐渐变大,达到某个最大值后,又开始逐渐缩小。
例如:1,2,2,5,10,9,8,2,1,1
要求按照元素从小到大顺序,不重复输出,上面case的输出为1,2,5,8,9,10。
要求时间复杂度O(n),空间复杂度O(1)。

思路

双指针

代码最少的方法:set去重后排序

代码

  1. def mountainArrays(nums):
  2. left, right = 0, len(nums) - 1
  3. ans = []
  4. while left <= right:
  5. if ans and nums[left] == ans[-1]:
  6. left += 1
  7. elif ans and nums[right] == ans[-1]:
  8. right -= 1
  9. elif nums[left] == nums[right]:
  10. ans.append(nums[left])
  11. left += 1
  12. right -= 1
  13. elif nums[left] < nums[right]:
  14. ans.append(nums[left])
  15. left += 1
  16. elif nums[left] > nums[right]:
  17. ans.append(nums[right])
  18. right -= 1
  19. return ans
  20. nums = [int(i) for i in input().split()]
  21. print(mountainArrays(nums))