leetcode笔记: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].
二. 题目分析
题目给出一个未排序的数组,调整元素的大小使其满足nums[0] <= nums[1] >= nums[2] <= nums[3],要求in-place。
第一种思路是先排序后调整。
依据题目的描写叙述,数组的组合方式有多种。因此能够先将数组进行排序,这时候从第3个元素開始,将第奇数个元素与前面一个偶数位置元素进行交换,如将第3个元素和第2个元素交换、将第5个元素和第4个元素交换。以此类推。
该方法的时间复杂度为:O(NlogN),空间复杂度:O(1)。
第二中思路是greedy,使用这样的方法仅仅需遍历一次数组,时间复杂度为:O(N)。
相同满足题目的in-place要求。
我们知道,在题目的描写叙述中能够总结出下面规律:
当下标i是奇数时,nums[i] >= nums[i - 1]
当下标i是偶数时。nums[i] <= nums[i - 1]
依据以上规律。仅仅需遍历一遍数组。把不符合的条件的元素交换一下就可以。
三. 演示样例代码
// 先排序后调整
class Solution {
public:
void wiggleSort(vector<int>& nums) {
if(nums.size() < 2) return;
sort(nums.begin(),nums.end());
// 将数组中一对一对交换
for(int i = 2; i < nums.size(); i += 2){
int tmp = nums[i-1];
nums[i-1] = nums[i];
nums[i] = tmp;
}
}
};
// 贪心法
class Solution {
public:
void wiggleSort(vector<int>& nums) {
if(nums.size() < 2) return;
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]);
}
}
};
四. 小结
兴许有题目:Wiggle Sort II。
leetcode笔记:Wiggle Sort的更多相关文章
- [LeetCode] 324. Wiggle Sort II 摆动排序 II
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...
- LeetCode 280. Wiggle Sort (摆动排序)$
Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...
- [LeetCode] 280. Wiggle Sort 摆动排序
Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...
- Leetcode 280. Wiggle Sort
Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...
- leetcode 280.Wiggle Sort 、324. Wiggle Sort II
Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...
- leetcode笔记:Sort Colors
一. 题目描写叙述 Given an array with n objects colored red, white or blue, sort them so that objects of the ...
- LeetCode 280. Wiggle Sort C#
Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...
- leetcode 324 Wiggle Sort 2
利用中位数的概念,中位数就是将一组数分成2等份(若为奇数,则中位数既不属于左也不属于右,所以是2等份),其一组数中任何一个元素都大于等于另一组数 那么我们是不是只要一左一右配合着插入,就保证了差值+- ...
- [LeetCode] Wiggle Sort II 摆动排序
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...
随机推荐
- VMWare 支持的网络连接类型 (VMWare Virtual Network Connection Types)
- MySql学习笔记(三) —— 聚集函数的使用
1.AVG() 求平均数 select avg(prod_price) as avg_price from products; --返回商品价格的平均值 ; --返回生产商id为1003的商品价格平均 ...
- Linux下ifconfig不显示ip地址问题总结
问题一:ifconfig之后只显示lo,没有看到eth0 ? eth0设置不正确,导致无法正常启动,修改eth0配置文件就好 ubuntu 12.04的网络设置文件是/etc/network/inte ...
- ThinkPHP---thinkphp会话支持和文件载入
[一]会话控制 会话支持一般指cookie和session,在ThinkPHP里为了方便开发,封装了cookie和session方法. (1)session方法 在函数库封装了session方法 se ...
- DH密钥交换算法
DH密钥交换算法:DH的全称为Diffie-Hellman ,该算法可以在需要安全传输的前提下,确定双方的对称密钥,该算法的核心在于双方的私钥没有进入网络传输流程,根据对方的公钥和己方的私钥,可以计算 ...
- Python学习第二阶段day1 内置函数,序列化,软件目录开发规范
内置函数 1.abs() 求绝对值 2.all() 所有元素为真才返回真 all( [1,1,2,3,-1] ) 值为True 3.any() 所有元素为假才返回假 any([0,0,0 ...
- win10 ubuntu 子系统安装php
apt-get install python-software-propertiesadd-apt-repository ppa:ondrej/phpapt-get updateapt-get ins ...
- C,LINUX,数据结构部分
1604期 第1期测试(面试精选:C,LINUX,数据结构部分) 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:24 ...
- textarea 高度调整
textarea 高度调整 通过 rows 属性调整 高度
- SSM+Shiro
1) 表名:用户表(Sys_Users) Salt:盐(佐料).为避免被黑客等进行攻击(暴力密码破解),所以一般在注册用户信息时,系统会随机生成一个随机码.在验证时会将密码和随机码进行运算,以验证密码 ...