Java解决峰与谷问题
01 题目
-
在一个整数数组中,"峰"是大于或等于相邻整数的元素,相应地,"谷"是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:
输入: [5, 3, 1, 2, 3] 输出: [5, 1, 3, 2, 3]
提示:
nums.length <= 10000
02 知识点
- 排序
- 双指针
- 奇偶数判断
03 我的题解
java
public class paixu02 {
public static void main(String[] args) {
// 测试数据
int[] nums= {3,5,2,1,1};
wiggleSort(nums);
}
public static void wiggleSort(int[] nums) {
if (nums.length<3) {
return;
}
int[] counts=Arrays.copyOf(nums, nums.length);
Arrays.sort(counts);
// 从左极循环到右极,双指针交替插入数据
int l=0;
int r=nums.length-1;
int index=0;
while (l<r) {
nums[index++]=counts[r--];
nums[index++]=counts[l++];
}
// 当数据为单数时,为中间值赋值
if (nums.length%2==1) {
nums[index]=counts[l];
}
// 测试数据
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
}