峰与谷00

题目链接

峰与谷

题目描述

注意点

  • nums.length <= 10000

解答思路

  • 首先想到的是将数组中的元素都存到优先队列中,然后取一半的元素插入到数组奇数位置,再将剩下一半的元素插入到数组偶数位置即可,但是时间上并不理想
  • 参照题解可以从局部谷-峰-谷到全局谷-峰-谷,保证遍历过的前部分都满足谷-峰-谷。从第一个位置开始,通过其与后一个元素的大小关系确定其是是峰还是谷,后一个元素也以相同方式确认是峰还是谷,如果相邻两个元素都是峰或谷,因为前面的所有元素已经满足谷-峰-谷,所以可以将后两个元素交换位置,重复上述过程遍历完整个数组即可

代码

java 复制代码
class Solution {
    public void wiggleSort(int[] nums) {
        if (nums.length < 3) {
            return;
        }
        boolean prev = nums[0] > nums[1] ? true : false;
        for (int i = 1; i < nums.length - 1; i++) {
            boolean curr = nums[i] > nums[i + 1] ? true : false;
            if (prev == curr) {
                swap(nums, i, i + 1);
            }
            prev = !prev;
        }
    }

    public void swap(int[] nums, int m, int n) {
        int tmp = nums[m];
        nums[m] = nums[n];
        nums[n] = tmp;
    }
}

关键点

  • 找到局部谷-峰-谷到全局谷-峰-谷的规律
相关推荐
程序员天天困26 分钟前
Arthas Profiler 火焰图实战:CPU 热点在哪一目了然
java·jvm·后端
我命由我1234530 分钟前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
用户31268748772036 分钟前
@Autowired 注入的是代理对象?Spring AOP 代理选择原理一次讲透
java·spring
白白白小纯38 分钟前
算法篇—链表的中间节点
c语言·数据结构·算法·leetcode
@insist12341 分钟前
信息系统管理工程师-任务、标准、EDM 过程与关键域
java·大数据·数据库
木子杳衫1 小时前
Java高级进阶 | 单元测试JUnit + 反射机制实战详解
java·junit·单元测试
Frostnova丶1 小时前
(19)LeetCode 54. 螺旋矩阵
算法·leetcode·矩阵
qq_366086221 小时前
关于接口路径中中文值解码问题
java·开发语言·数据库
Frostnova丶1 小时前
(18)LeetCode 73. 矩阵置零
算法·leetcode·矩阵
大白菜和MySQL1 小时前
elk部署和kibana图形化展示
java·笔记·elasticsearch