leetcode324 摆动排序II
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的更多相关文章
- [Swift]LeetCode324. 摆动排序 II | Wiggle Sort II
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...
- Leetcode 324.摆动排序II
摆动排序II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums ...
- Java实现 LeetCode 324 摆动排序 II
324. 摆动排序 II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]- 的顺序. 示例 1: 输入: n ...
- [LeetCode] 324. Wiggle Sort II 摆动排序 II
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...
- 324. 摆动排序 II(三路划分算法)
题目: 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [ ...
- LeetCode——324. 摆动排序 II
给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [1, 5 ...
- [Leetcode] 第324题 摆动排序II
一.题目描述 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums ...
- 324 Wiggle Sort II 摆动排序 II
给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序.例子:(1) 给定nums = [1, 5, 1, ...
- [LeetCode] 280. Wiggle Sort 摆动排序
Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...
随机推荐
- 进程、线程、协程的基本解析(python代码)
进程什么是进程?程序就是一堆放在磁盘上的代码,进程是一段程序的运行过程正规点说,进程一般由程序.数据集.进程控制块三部分组成 什么进程切换?进程切换是,一个正在运行的进程被中断,操作系统指定另一个进程 ...
- Win7系统开机速度慢怎么解决?
Win7系统使用时间长了,我们就会发现电脑的开机启动速度变慢了,其实除了关闭相应的启动项之外,我们还可以对电脑进行相关的系统配置,来使电脑能够更加快速的启动.下面好系统重装助手就来告诉你怎么解决Win ...
- Zabbix 监控Windows磁盘IO
Windows下,打开cmd输入 typeperf -qx > c:\typeperf.txt #打开c:\typeperf.txt文件 windows性能计数器里面包含windows相关数值 ...
- 11.tensorboard网络结构
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 载入数据集 mnist = i ...
- zencart更改css按钮的宽度css buttons
includes\functions\html_output.php 大概323行的zenCssButton函数 function zenCssButton($image = '', $text, $ ...
- CSS基础学习-11.CSS伸缩盒(新版本)
- uboot驱动模型(DM)分析(二) (转)
上篇分析了两个关键宏U_BOOT_DRIVER及U_BOOT_DEVICES的作用,有了上篇的基础,本文将分析: 1.上篇中的uboot_list段中的信息如何被用起来? 2.uclass,uclas ...
- 解决git提交敏感信息(回退git版本库到某一个commit)
解决git提交敏感信息(回退git版本库到某一个commit) Fri 07 June 2013 git是一个很好的版本库, 现在很多人用它, 并在github上创建项目, 相信大家都有过将敏感信息提 ...
- lombok使用及常用注解
简介 大部分项目中都必不可少的包含数据库实体(Entity).数据载体(dto,dataObject),而这两部分都包含着大量的没有业务逻辑的setter.getter.空参构造,同时我们一般要复写类 ...
- 题解 【POJ1952】 BUY LOW, BUY LOWER
题目意思: 给你一个长度为\(n\)(\(1<=n<=5000\))的序列,并求出最长下降子序列的长度及个数, 并且,如果两个序列中元素的权值完全相同,那么即使它们的位置不一样,也只算一种 ...