一. 题目描写叙述

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的更多相关文章

  1. [LeetCode] 324. Wiggle Sort II 摆动排序 II

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

  2. LeetCode 280. Wiggle Sort (摆动排序)$

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

  3. [LeetCode] 280. Wiggle Sort 摆动排序

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

  4. Leetcode 280. Wiggle Sort

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

  5. leetcode 280.Wiggle Sort 、324. Wiggle Sort II

    Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...

  6. leetcode笔记:Sort Colors

    一. 题目描写叙述 Given an array with n objects colored red, white or blue, sort them so that objects of the ...

  7. LeetCode 280. Wiggle Sort C#

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

  8. leetcode 324 Wiggle Sort 2

    利用中位数的概念,中位数就是将一组数分成2等份(若为奇数,则中位数既不属于左也不属于右,所以是2等份),其一组数中任何一个元素都大于等于另一组数 那么我们是不是只要一左一右配合着插入,就保证了差值+- ...

  9. [LeetCode] Wiggle Sort II 摆动排序

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

随机推荐

  1. 拒绝了对对象 'data'(数据库 'xxx',所有者 'dbo')的 SELECT 权限

    拒绝了对对象 'data'(数据库 'xxx',所有者 'dbo')的 SELECT 权限解决的方法:1>在数据库里相应的用户权限中,把db_denydatareader的复选框的勾去掉.很多初 ...

  2. 【译】x86程序员手册23-6.5组合页与段保护

    6.5 Combining Page and Segment Protection 组合页与段保护 When paging is enabled, the 80386 first evaluates ...

  3. vue项目国际化实现 vue-i18n使用详细教程

    1.安装vue-i18n: npm i vue-i18n -S 当然你也可以这样: <script src="https://unpkg.com/vue/dist/vue.js&quo ...

  4. /etc/updatedb.conf配置文件

    [root@localhost ~]# vi /etc/updatedb.conf PRUNE_BIND_MOUNTS = "yes" PRUNEFS = "9p afs ...

  5. 顶点的度 (20 分) Java解法

    顶点的度 顶点的图.给定一个有向图,输出各顶点的出度和入度. 输入格式: 输入文件中包含多个测试数据,每个测试数据描述了一个无权有向图.每个测试数据的第一行为两个正整数n 和m,1 ≤ n ≤ 100 ...

  6. HDU4496 D-City【基础并查集】

    Problem Description Luxer is a really bad guy. He destroys everything he met.  One day Luxer went to ...

  7. web视频播放插件:Video For Everybody

    相比其它的web视频播放插件(video.js , jwplayer等)来说,Video For Everybody(极力推荐)是一款更好的视频播放插件,无需任何下载,支持html5以及flash播放 ...

  8. python virtualenv 虚拟环境的应用

    为什么要使用python的虚拟环境呢?: 首先我们来说不实用虚拟环境的情况: 在Python应用程序开发的过程中,系统安装的Python3只有一个版本:3.7.所有第三方的包都会被pip3安装到   ...

  9. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交

    [题解] 题意就是判断树上两条链是否有交.口诀是“判有交,此链有彼祖”.即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两个端点分别求Lca, ...

  10. 什么是js严格模式?

    [03] 严格模式 ECMAScript 5 引入了严格模式(strict mode)的概念.严格模式是为JavaScript 定义了一种不同的解析与执行模型.在严格模式下,ECMAScript 3  ...