Wiggle Sort

Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] <= nums[3]....

For example, given nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4].

排序法

复杂度

时间 O(NlogN) 空间 O(1)

思路

根据题目的定义,摇摆排序的方法将会很多种。我们可以先将数组排序,这时候从第3个元素开始,将第3个元素和第2个元素交换。然后再从第5个元素开始,将第5个元素和第4个元素交换,以此类推。就能满足题目要求。

代码

public class Solution {public void wiggleSort(int[] nums) {// 先将数组排序Arrays.sort(nums);// 将数组中一对一对交换for(int i = 2; i < nums.length; i+=2){int tmp = nums[i-1];nums[i-1] = nums[i];nums[i] = tmp;}}
}

交换法

复杂度

时间 O(N) 空间 O(1)

思路

题目对摇摆排序的定义有两部分:

  1. 如果i是奇数,nums[i] >= nums[i - 1]

  2. 如果i是偶数,nums[i] <= nums[i - 1]

所以我们只要遍历一遍数组,把不符合的情况交换一下就行了。具体来说,如果nums[i] > nums[i - 1], 则交换以后肯定有nums[i] <= nums[i - 1]。

代码

public class Solution {public void wiggleSort(int[] nums) {for(int i = 1; i < nums.length; i++){// 需要交换的情况:奇数时nums[i] < nums[i - 1]或偶数时nums[i] > nums[i - 1]if((i % 2 == 1 && nums[i] < nums[i-1]) || (i % 2 == 0 && nums[i] > nums[i-1])){int tmp = nums[i-1];nums[i-1] = nums[i];nums[i] = tmp;}}}
}

[Leetcode] Wiggle Sort 摇摆排序相关推荐

  1. C++Wiggle Sort摆动排序的实现算法(附完整源码)

    C++Wiggle Sort摆动排序的实现算法 C++Wiggle Sort摆动排序的实现算法完整源码(定义,实现,main函数测试) C++Wiggle Sort摆动排序的实现算法完整源码(定义,实 ...

  2. LeetCode Wiggle Sort II(快排)

    问题:给出一个无序数组,将它重新排列成nums[0]<nums[1]>nums[2]<nums[3]... 思路:将无序数组排序后,从中间及最后下标开始相间的填入值. 具体代码参考: ...

  3. LeetCode Wiggle Sort II

    1232131 转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10936707.html

  4. 【LeetCode 剑指offer刷题】查找与排序题14:Wiggle Sort(系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Wiggle Sort II Given an unsorted array nums, reorder it su ...

  5. 【排序】LeetCode 75. Sort Colors

    LeetCode 75. Sort Colors Solution1: 参考自:<leetcode-cpp 答案> 由于0,1,2非常紧凑,首先想到计数排序(counting sort), ...

  6. LeetCode 148. Sort List--面试算法题--C++,Python解法

    LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...

  7. LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)

    LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...

  8. LeetCode Wiggle Subsequence(动态规划)

    问题:给出一个数组,求波动序列的最大长度. 思路:方法一使用up(i)表示第i个元素是上升时最大长度,down(i)表示第i个元素是下降时最大长度.则有up(i)=max(down(j) +1, up ...

  9. redis 的使用 (sort set排序集合类型操作)

    sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子( ...

最新文章

  1. 计算机背小学英语吗,小学英语课本点读电脑版
  2. alu是计算机中的什么东西,ALU,什么是ALU,ALU介绍--电子百科词库--科通芯城,IC及其他电子元器件交易型电商平台100%正品保证...
  3. 基于时间片轮转程序分析进程调度
  4. .net中不同的方法相同的结果
  5. 意外收获字节跳动内部资料,已开源
  6. spring RestTemplate用法详解
  7. Sublime 安装包时出现的 There are no packages available for installation
  8. LeetCode -- Sort List
  9. BRVAH(让RecyclerView变得更高效) (3)
  10. 【习题 6-5 UVA-1600】Patrol Robot
  11. 如何更改node.js的控制台字体颜色?
  12. x86架构应用如何向Arm架构低成本迁移
  13. 数字兆欧表的使用及安全注意事项
  14. matlab 符号计算,第3章 MATLAB符号计算
  15. 2014年最新810多套源码2.46GB免费一次性打包下载
  16. 共享文件夹w7和服务器系统区别,w7服务器怎样共享文件夹共享文件夹
  17. 11.16上海交大PMP试题每日一题
  18. C 懒虫小鑫 SDUT
  19. 5.3 三指针尺取法——【锻造兵器】
  20. iPhone管理软件iMazing 2.16.9激活密钥免费版百度网盘下载

热门文章

  1. java byte xml_Java XMLInputSource.setByteStream方法代码示例
  2. java数组中怎么去重_java数组去重怎么弄???大神来解
  3. ctypealpha php_php ctype函数中文翻译和示例
  4. Java学习总结:51(对象序列化)
  5. Java学习总结:47(打印流)
  6. JAVA 继承内存模型_Java内存模型
  7. JDK的安装与系统环境变量的配置
  8. 子div超出父div_菜鸟学 react props 子到父
  9. 卡巴斯基安全浏览器_卡巴斯基 for windows 全方位安全软件2021注册表清除版
  10. uniapp富文本兼容视频实现方案