博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 280.Wiggle Sort 、324. Wiggle Sort II
阅读量:5044 次
发布时间:2019-06-12

本文共 2240 字,大约阅读时间需要 7 分钟。

这两个题可以理解为奇数位大于相邻两个偶数位,这两个题的输入数组是相同的,即数组中数值无序,且可能有相等的数值。但Wiggle Sort II要求是奇偶位的只能大于,不能等于。

无论是280.Wiggle Sort还是324. Wiggle Sort II,都可以通过排序,然后以中间值为分界分成a、b两部分,每次先从a中选择一个数,然后再从b中选择一个数组成新的数组就是锯齿状的数组了,如下图。

但是这种方式,时间复杂度是O(NlogN),空间是O(N),因为你需要重新申请一个数组。

 

 

Wiggle Sort:

      注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求。

      解法一错误版本:

      如果nums的长度是4,这种情况下nums[i+1]会越界。但是如果你用的是i和i-1的组合,一定可以不会越界,因为i不越界i-1就一定不会越界,for循环控制i,i越界了整个循环就结束了。

class Solution {public:    void wiggleSort(vector
& nums) { sort(nums.begin(),nums.end()); for(int i = 1;i < nums.size();i += 2){ swap(nums[i],nums[i+1]); } return; }};

     解法一正确版本:

     如果没有if这个语句,当nums.size() <= 2时,for循环里的nums[i]会出现数组越界

class Solution {public:    void wiggleSort(vector
& nums) { sort(nums.begin(),nums.end()); if(nums.size() <= 2) return; for(int i = 2;i < nums.size();i += 2) swap(nums[i],nums[i-1]); return; }};

       解法二

时间复杂度为O(n),空间复杂度为O(1)。

这个代码无法跑Wiggle Sort II,还是在有相同数字的时候出错,比如输入是[4,5,5,6],输出变成[4,5,5,6]

https://www.cnblogs.com/grandyang/p/5177285.html

class Solution {public:    /*     * @param nums: A list of integers     * @return: nothing     */    void wiggleSort(vector
&nums) { // write your code here for(int i = 1;i < nums.size();i++){ if((i%2 == 1 && nums[i] < nums[i-1]) || (i%2 == 0 && nums[i] > nums[i-1])) swap(nums[i],nums[i-1]); } }};

 

 

324. Wiggle Sort II

解法一

这个解法和Wiggle Sort的解法一类似,先排序,然后再让奇偶位保持锯齿状。但Wiggle Sort解法一的代码不适合Wiggle Sort II,因为Wiggle Sort II要求不能相等,所以针对输入数组中有相同数字的情况就不能正确解决。

比如:[1,5,1,1,6,4]就会错误生成[1,1,5,6,1,4],不过针对没有相同数字的数组解法一也是可以的。

 

与1不同,这个不能为等号。排序后,两个指针,一个从中间往前,一个从末尾往前。j、k的初始化这注意,必须保证0~j比j+1~k大于等于1个,这样才能填满。这个的空间复杂度就为O(n)了。

class Solution {public:    void wiggleSort(vector
& nums) { vector
tmp = nums; sort(tmp.begin(),tmp.end()); int j = (nums.size() - 1)/2,k = nums.size() - 1; for(int i = 0;i < nums.size();i++){ nums[i] = i % 2 ? tmp[k--] : tmp[j--]; } return; }};

http://www.cnblogs.com/grandyang/p/5139057.html

 

转载于:https://www.cnblogs.com/ymjyqsx/p/9862099.html

你可能感兴趣的文章
个人对团队项目的意见以及对项目需求的分析
查看>>
14.DNS:域名系统
查看>>
函数初识(函数的返回值,三元运算,函数的传参)
查看>>
object detection模型转换成TensorFlow Lite,在Android应用
查看>>
54.文件按大小切割
查看>>
fonts.useso.com 访问变慢
查看>>
【NGN学习笔记】3 软交换中的协议1--SIP、SIP-I/SIP-T/BICC
查看>>
nfs:server is not responding,still trying 原因与解决方案
查看>>
Linux程序前台后台切换
查看>>
Mysql-视图
查看>>
虚拟光驱导致无法安装光驱驱动的解决方法
查看>>
Jmeter_录制脚本时添加模板
查看>>
Zen Coding: 一种快速编写HTML/CSS代码的方法
查看>>
UI进阶之CALayer
查看>>
排序算法总结
查看>>
C# 求俩个正整数的最小公倍数和最大公约数
查看>>
OverTheWire Bandit
查看>>
关于替换 UIWebView 网络模块的一些初步想法
查看>>
SG函数
查看>>
用ListView实现新闻展示
查看>>