题号:no61
题目名:峰与谷
原题URL:https://leetcode-cn.com/problems/peaks-and-valleys-lcci/
题目描述
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例
示例 1:
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]
限制
nums.length <= 10000
思路
1.排序后,从大到小排序,先放满奇数位置,这些做峰,之后再继续从大到小,放满偶数位置,这样可以保证峰->谷
解题代码
public class Solution {
public void wiggleSort(int[] nums) {
int[] res = new int[nums.length];
Arrays.sort(nums);
int idx = nums.length-1;
//把奇数安排从大到小
for (int i = 0; i < res.length;) {
res[i]=nums[idx--];
i+=2;
}
//把偶数位置从大到小放入
for (int i = 1; i < res.length;) {
res[i]=nums[idx--];
i+=2;
}
for (int i = 0; i < nums.length; i++) {
nums[i]=res[i];
}
}
}