😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
1、题目描述
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
2、基础框架
- Java版本框架代码如下:
class Solution {
public void wiggleSort(int[] nums) {
}
}
3、原题链接
二、解题报告
1、思路分析
(1)拷贝一个数组,对拷贝后的数组进行排序。
(2)定义两个指针,分别指向排序后数组的最右边(最大值)和最左边(最小值),先把最大值放到nums数组中,再把最小值放到nums数组中,然后左右指针向中间移动。
(3)重复第二步。
2、代码详解
class Solution {
public void wiggleSort(int[] nums) {
int[] tmp = new int[nums.length];
tmp = Arrays.copyOf(nums,nums.length);
Arrays.sort(tmp);
int left = 0;
int right = nums.length - 1;
int i = 0;
while(left <= right) {
if(left == right) {
nums[i++] = tmp[left];
break;
}
nums[i++] = tmp[right--];
nums[i++] = tmp[left++];
}
}
}