Wiggle Sort I && II
Posted Shirley_ICT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wiggle Sort I && II相关的知识,希望对你有一定的参考价值。
题目大意:
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],如果没有这个条件,是没有办法通过交换实现的)
具体思路看代码好了,如下:
class Solution { public: void wiggleSort(vector<int>& nums) { int n = nums.size(); for(int i=1; i<n; ++i) { if((i % 2== 1 && nums[i] < nums[i-1]) || (i % 2 == 0 && nums[i] > nums[i-1])) { swap(nums[i], nums[i-1]); } } } private: void swap(int &a, int &b) { int temp = a; a = b; b = temp; } };
上述代码时间复杂度为O(n),空间复杂度为O(1)
II是对I的延伸,题目链接:https://leetcode.com/problems/wiggle-sort-ii/
解题思路:(暂时还没有想到好的解决方法)
以上是关于Wiggle Sort I && II的主要内容,如果未能解决你的问题,请参考以下文章
***Leetcode 376. Wiggle Subsequence