【力扣题解】面试题 10.11. 峰与谷
😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
-
- 一、题目
-
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
-
- 1、思路分析
- 2、代码详解
一、题目
1、题目描述
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
2、基础框架
- Java版本框架代码如下:
class Solution { public void wiggleSort(int[] nums) { }}
3、原题链接
面试题 10.11. 峰与谷
二、解题报告
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++]; } }}