> 文档中心 > 【力扣题解】面试题 10.11. 峰与谷

【力扣题解】面试题 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++]; }    }}

组装电脑配置清单网