LeetCode——面试题 10.11. 峰与谷(JAVA)

在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。

示例:
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/peaks-and-valleys-lcci
根据下面的提示1:

假设数组按升序排序。有什么办法可以把它调整为交替的高峰和低谷?

只要将数组进行排序,就可以想到最大值和最小值肯定时峰谷相邻的。
所以:

package LeetCode;

import java.util.Arrays;

public class PeaksAndValleys {
    public void wiggleSort(int[] nums) {
        //思路:我们可以将数组进行排序,然后依次取出相对的最大值和最小值
        int idx = 0, len = nums.length;
        if (len < 3) return;
        int low = 0, high = len - 1;
        //复制原数组进行排序
        int[] sorted = Arrays.copyOf(nums, len);
        Arrays.sort(sorted);
        //依次取出相对最大和最小值放入数组
        while (low < high) {
            nums[idx++] = sorted[high--];
            nums[idx++] = sorted[low++];
        }
        // 当数组为奇数时,就会剩下最后一个中间的,将其放入数组
        if (len % 2 > 0)
            nums[idx] = sorted[low];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值