1. 首先考虑排序后交替插入

  首尾交替插入,这种方法对于有重复数字的数组不可行;

class Solution {
public:
void wiggleSort(vector<int>& nums) {
//因为一定存在最优解,所以一定可行的方法就是先排序,然后将最小的数逐渐插入到最大里面;
//错误,没有考虑重复答案存在情况;
sort(nums.begin(),nums.end());
int i=;
int j=nums.size()-;
vector<int> res;
while(i<=j){
if(i<=j)
res.push_back(nums[i++]);
if(i<=j)
res.push_back(nums[j--]);
}
for(int i=;i<nums.size();i++){
nums[i]=res[i];
}
}
};

对此进行改进:

class Solution {
public:
void wiggleSort(vector<int>& nums) {
//因为一定存在最优解,所以一定可行的方法就是先排序,然后将最小的数逐渐插入到最大里面; //改进,将前后两个数组反序如1 2 3 4 5 6 分为 【3 2 1】,【6 5 4】然后按顺序插入;
sort(nums.begin(),nums.end()); vector<int> res;
int mid=(nums.size()+)/;
int i=mid-;int j=nums.size()-;
while(i>=){
if(i>=) res.push_back(nums[i--]);
if(j>=mid) res.push_back(nums[j--]);
}
for(int i=;i<nums.size();i++){
nums[i]=res[i];
}
}
};

采用快排:

class Solution {
public:
int partition(vector<int>& nums,int l,int r){
int pivot=nums[l];
while(l<r){
while(l<r && nums[r]>=pivot)
r--;
nums[l]=nums[r];
while(l<r && nums[l]<=pivot)
l++;
nums[r]=nums[l];
}
nums[l]=pivot;
return l;
}
void quicksort(vector<int>& nums,int start,int end){
if(start>=end) return;
int pivot=partition(nums,start,end);
quicksort(nums,start,pivot-);
quicksort(nums,pivot+,end);
}
void wiggleSort(vector<int>& nums) {
//因为一定存在最优解,所以一定可行的方法就是先排序,然后将最小的数逐渐插入到最大里面;
quicksort(nums,,nums.size()-);
vector<int> res;
int mid=(nums.size()+)/;
int i=mid-;int j=nums.size()-;
while(i>=){
if(i>=) res.push_back(nums[i--]);
if(j>=mid) res.push_back(nums[j--]);
}
for(int i=;i<nums.size();i++){
nums[i]=res[i];
}
}
};

以上方法的时间复杂度为O(nlogn) 空间复杂度为O(n)

  2. 还有时间复杂度为O(n)的原地方法:

空间复杂度为O(1),

leetcode324 摆动排序II的更多相关文章

  1. [Swift]LeetCode324. 摆动排序 II | Wiggle Sort II

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

  2. Leetcode 324.摆动排序II

    摆动排序II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums ...

  3. Java实现 LeetCode 324 摆动排序 II

    324. 摆动排序 II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]- 的顺序. 示例 1: 输入: n ...

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

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

  5. 324. 摆动排序 II(三路划分算法)

    题目: 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [ ...

  6. LeetCode——324. 摆动排序 II

    给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [1, 5 ...

  7. [Leetcode] 第324题 摆动排序II

    一.题目描述 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums ...

  8. 324 Wiggle Sort II 摆动排序 II

    给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序.例子:(1) 给定nums = [1, 5, 1, ...

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

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

随机推荐

  1. php使用rdkafka进行消费

    如仅作为消费者或生产者,直接使用下面消费者或生产者的代码,并安装扩展即可. PHP要安装rdkafka扩展,而rdkafka又依赖librdkafka,因此你需要安装rdkafka和librdkafk ...

  2. Ubuntu .tar.xz文件解压缩命令

    1.解压缩.tar.xz文件 这是两层压缩,外面是xz压缩方式,里层是tar压缩 所以可以分两步实现解压 $ xz -d filename.tar.xz $ tar -xvf filename.tar ...

  3. Sass的混合-@mixin,@include

    1,无参数,有参数和带默认值参数的@mixin声明sass文件内容: //带参数,默认50@mixin opa($opa:50){ opacity: $opa / 100; filter:alpha( ...

  4. PHP程序员要掌握的技能

    1. Composer 第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单.程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 ...

  5. 关于注解-Hebernate与JPA(java persistence api)

    The JPA spec. defines the JPA annotation in the javax.persistence package. Hibernate not only implem ...

  6. 微软Blazor组件发布,DevExpress v19.1.8中可用:Charts新功能

    点击获取DevExpress v19.2.3最新完整版试用下载 DevExpress UI for Blazor在v19.1.8中可用,此次更新发布包括DevExpress Blazor组件的主要功能 ...

  7. IPC 进程间通信方式——信号量

    信号量 本质上是共享资源的数目,用来控制对共享资源的访问. 用于进程间的互斥和同步 每种共享资源对应一个信号量,为了便于大量共享资源的操作引入了信号量集,可对多对信号量一次性操作.对信号量集中所有的操 ...

  8. Monkey使用详情

    https://blog.csdn.net/zhangmeng1314/article/details/82699316 比如使用 adb shell input keyevent <keyco ...

  9. BZOJ 3060: [Poi2012]Tour de Byteotia 并查集

    前 $k$ 个节点形成的结构必定是森林,而 $[k+1,r]$ 之间肯定是都连上,而剩下的一个在 $[1,k],$一个在 $[k+1,r]$ 的节点就能连多少连多少即可. Code: #include ...

  10. 顺序表应用3:元素位置互换之移位算法(SDUT 3326)

    题解:用一个for,循环m次,每次都把最前面的放到最后面,就可以了. #include <stdio.h> #include <stdlib.h> #include <s ...