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中的面向对象知识(魔法方法+反射+元类+鸭子类型)
面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...
- Windows live Writer Tips
http://lehsys.blogspot.com/2013/03/windows-live-writer-how-to-change.html http://www.carlosag.net/to ...
- MySQL单表查询实例
数据表准备 ```mysql create table emp( id int not null unique auto_increment, name varchar(20) not null, ...
- [微信小程序]聊天对话(文本,图片)的功能(完整代码附效果图)
废话不多说, 先上图: <!--pages/index/to_news/to_news.wxml--> <view class='tab'> <view class='l ...
- [CEOI1999]Sightseeing trip(Floyed)
[CEOI1999]Sightseeing trip Description There is a travel agency in Adelton town on Zanzibar island. ...
- Python 学习第一天(二)python 入门
1.第一个python程序 1.1 直接打印输出 打开cmd,输入python进入到python交互式环境:(看到>>>是在Python交互式环境下:) 在python交互环境下输入 ...
- 【u-boot】u-boot中initf_dm()函数执行流程(转)
前部分设备模型初始化 为了便于阅读,删掉部分代码,只留关键的过程: static int initf_dm(void){ int ret; ret = dm_init_and_scan(t ...
- AIDE入侵检测系统
一.AIDE简介 • AIDE(Advanced Intrusion Detection Environment)• 高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那 ...
- 【洛谷P4172】水管局长
题目大意:给定 N 个点,M 条边的无向图,支持两种操作:动态删边和查询任意两点之间路径上边权的最大值最小是多少. 题解: 引理:对原图求最小生成树,可以保证任意两点之间的路径上边权的最大值取得最小值 ...
- printf格式输出
参考:http://www.cplusplus.com/reference/cstdio/printf/ C string that contains the text to be written t ...