本文主要是介绍面试题 10.11. 峰与谷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
面试题 10.11. 峰与谷
原始题目链接:https://leetcode-cn.com/problems/peaks-and-valleys-lcci/submissions/
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]
解题思路:
一次遍历,判断当前元素和它的前一个元素比较,依据题目的峰和谷的定义,假设一个峰谷交错的顺序,然后比较即可。具体实现看代码及注释。
代码实现:
class Solution:def wiggleSort(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""# 一次遍历:交错的排序,例如:峰-谷-峰-谷-峰...for i in range(1, len(nums)):# 按照例子,比如峰谷峰的顺序# 那索引为第0 2 4...的位置是峰,即位置对2求余是0if i % 2 == 0:# 当前位置的元素如果和它的前一个元素相比较,大于的话就交换元素# 把大的元素换到峰的位置上去if nums[i] > nums[i - 1]:nums[i], nums[i - 1] = nums[i - 1], nums[i]# 谷的索引,即索引是奇数else:# 当前位置的元素如果和它的前一个元素相比较,小于的话就交换元素# 把小的元素放在谷的位置上去if nums[i] < nums[i - 1]:nums[i], nums[i - 1] = nums[i - 1], nums[i]
参考文献:
https://leetcode-cn.com/problems/peaks-and-valleys-lcci/solution/onsuan-fa-qiu-jie-by-whut_hj/
这篇关于面试题 10.11. 峰与谷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!