leetcode 280.Wiggle Sort 、324. Wiggle Sort II
这两个题可以理解为奇数位大于相邻两个偶数位,这两个题的输入数组是相同的,即数组中数值无序,且可能有相等的数值。但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<int>& nums) {
sort(nums.begin(),nums.end());
for(int i = ;i < nums.size();i += ){
swap(nums[i],nums[i+]);
}
return;
}
};
解法一正确版本:
如果没有if这个语句,当nums.size() <= 2时,for循环里的nums[i]会出现数组越界
class Solution {
public:
void wiggleSort(vector<int>& nums) {
sort(nums.begin(),nums.end());
if(nums.size() <= )
return;
for(int i = ;i < nums.size();i += )
swap(nums[i],nums[i-]);
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<int> &nums) {
// write your code here
for(int i = ;i < nums.size();i++){
if((i% == && nums[i] < nums[i-]) || (i% == && nums[i] > nums[i-]))
swap(nums[i],nums[i-]);
}
}
};
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<int>& nums) {
vector<int> tmp = nums;
sort(tmp.begin(),tmp.end());
int j = (nums.size() - )/,k = nums.size() - ;
for(int i = ;i < nums.size();i++){
nums[i] = i % ? tmp[k--] : tmp[j--];
}
return;
}
};
http://www.cnblogs.com/grandyang/p/5139057.html
leetcode 280.Wiggle Sort 、324. Wiggle Sort II的更多相关文章
- leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST
1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...
- leetcode 169. Majority Element 、229. Majority Element II
169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...
- leetcode 39. Combination Sum 、40. Combination Sum II 、216. Combination Sum III
39. Combination Sum 依旧与subsets问题相似,每次选择这个数是否参加到求和中 因为是可以重复的,所以每次递归还是在i上,如果不能重复,就可以变成i+1 class Soluti ...
- leetcode 79. Word Search 、212. Word Search II
https://www.cnblogs.com/grandyang/p/4332313.html 在一个矩阵中能不能找到string的一条路径 这个题使用的是dfs.但这个题与number of is ...
- leetcode 54. Spiral Matrix 、59. Spiral Matrix II
54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...
- leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...
- leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
344. Reverse String 最基础的旋转字符串 class Solution { public: void reverseString(vector<char>& s) ...
- leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II
131. Palindrome Partitioning substr使用的是坐标值,不使用.begin()..end()这种迭代器 使用dfs,类似于subsets的题,每次判断要不要加入这个数 s ...
- leetcode 62. Unique Paths 、63. Unique Paths II
62. Unique Paths class Solution { public: int uniquePaths(int m, int n) { || n <= ) ; vector<v ...
随机推荐
- Java 初级面试题及答案
1.Java中的重载与重写有什么区别 重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重 ...
- django项目一 CRM表结构
from django.db import models from django.contrib import auth from django.core.exceptions import Perm ...
- Python面试题都在这里了
转自武沛齐博客:http://www.cnblog.com/wupeiqi/ 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java ...
- python学习之老男孩python全栈第九期_day004知识点总结
1. 列表list: 列表转换成字符串: s = 'kidd' s1 = '_'.join(s) # 用_连接 字符串转换成列表: split() range(头,尾,步长): [0,1,2,3,4, ...
- layui实现复选框全选,反选
html <div class="layui-input-inline"> <input type="checkbox" class=&quo ...
- cf250D. The Child and Sequence(线段树 均摊复杂度)
题意 题目链接 单点修改,区间mod,区间和 Sol 如果x > mod ,那么 x % mod < x / 2 证明: 即得易见平凡, 仿照上例显然, 留作习题答案略, 读者自证不难. ...
- js-ES6学习笔记-对象的扩展
1.ES6允许直接写入变量和函数,作为对象的属性和方法.这种写法用于函数的返回值,将会非常方便.CommonJS模块输出变量,就非常合适使用简洁写法. var ms = {}; function ge ...
- Dynamics 365Online Server-Side OAuth身份认证
在上篇演示了在html页面中通过调用online的OAuth身份验证后再通过web api取10条客户数据并展示,本篇继续讲述如何在server-side程序中调用online的OAuth认证再通过w ...
- Django. No changes detected when "makemigrations"
在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码. 但有时执行python manage.py makemigration ...
- Unity Frame Debugger连接Android真机调试
当用Profiler分析到不是代码导致的性能问题,当前场景最大的性能瓶颈是渲染时,或者自己写的Shader要调试时,都可以用Frame Debugger进行调试. 按下列步骤设置打包,既可以用Prof ...