原文链接: https://leetcode-cn.com/problems/peaks-and-valleys-lcci
英文原文
In an array of integers, a "peak" is an element which is greater than or equal to the adjacent integers and a "valley" is an element which is less than or equal to the adjacent integers. For example, in the array {5, 8, 4, 2, 3, 4, 6}, {8, 6} are peaks and {5, 2} are valleys. Given an array of integers, sort the array into an alternating sequence of peaks and valleys.
Example:
Input: [5, 3, 1, 2, 3] Output: [5, 1, 3, 2, 3]
Note:
nums.length <= 10000
中文题目
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:
输入: [5, 3, 1, 2, 3] 输出: [5, 1, 3, 2, 3]
提示:
nums.length <= 10000
通过代码
高赞题解
解题思路
假设按照峰-谷-峰的顺序排列数组,那么遍历一遍数组:
(1)如果i为峰的位置,则判断当前位置是否小于前一个位置(前一个为谷),若小于,则交换,大于则不处理。即: if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1]);
(2)如果i为谷的位置,则判断当前位置是否大于前一个位置(前一个为峰),若大于,则交换,大于则不处理。即: if(nums[i]>nums[i-1]) swap(nums[i],nums[i-1]);
代码
class Solution {
public:
void wiggleSort(vector<int>& nums) {
for(int i=1;i<nums.size();i++){
if(i%2==0){
if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1]);
}
else{
if(nums[i]>nums[i-1]) swap(nums[i],nums[i-1]);
}
}
}
};
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
8222 | 12366 | 66.5% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|