欢迎访问我的blog http://www.codinglemon.cn/
面试题 10.11. 峰与谷
1. 题目描述
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]
提示:
- nums.length <= 10000
2. 解题代码
基于波峰波谷的原理,类似于y=sinx的函数,那么只要波峰是按序排列的,自然波谷也按序排列了。
故跳跃式的找出波峰,调整位置,该题就解答出来了。代码如下:
class Solution {
public void wiggleSort(int[] nums) {
//若数组长度为偶数,则会导致最后一位的右侧没有数据,遍历到最后一位时只需判断i与i-1即可
for (int i = 1; i < nums.length; i= i+2) {
int max = i;
if(i != nums.length-1){
if(nums[i-1]>= nums[i] && nums[i-1]>=nums[i+1]){
max = i-1;
}else if(nums[i+1] >= nums[i-1] && nums[i+1]>=nums[i]){
max = i+1;
}
}else {
if(nums[i] < nums[i-1]){
max = i-1;
}
}
int temp = nums[max];
nums[max] = nums[i];
nums[i] = temp;
}
}
}
最后提交后时间和内存消耗如下:
难度不大。