峰与谷
- 难度:Medium
- 题目链接:https://leetcode-cn.com/problems/peaks-and-valleys-lcci/
题目描述
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:
输入: [5, 3, 1, 2, 3] 输出: [5, 1, 3, 2, 3]
提示:
nums.length <= 10000
解法:
希望谷峰交错,即在整个序列中,前一个数减去后一个数,要正负交替。
假如希望先出现峰,那么需要 nums[0] > nums[1]
,否则交换两者即可。接下来需要一个谷,需要 nums[1] < nums[2]
,如果 nums[2] < nums[1]
,那么交换后 nums[0]
必然还是大于 nums[1]
的。因此,交换后不会影响前面。
class Solution {
public:
void wiggleSort(vector<int>& nums) {
int sign = 1;
for(int i=1;i<nums.size();i++){
if((nums[i-1] - nums[i]) * sign < 0){
::swap(nums[i], nums[i-1]);
}
sign *= -1;
}
}
};