峰与谷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;
    }
}

关键点

  • 找到局部谷-峰-谷到全局谷-峰-谷的规律
相关推荐
学长毕设2 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw3 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
UIU1144 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
源码集结号4 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi5 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
啃瓜子的松鼠5 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David6 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友