贪心
数组
排序
题目描述
给你一个的整数数组 nums
, 将该数组重新排序后使 nums[0] <= nums[1] >= nums[2] <= nums[3]...
输入数组总是有一个有效的答案。
示例 1:
输入: nums = [3,5,2,1,6,4]
输出: [3,5,1,6,2,4]
解释: [1,6,2,5,3,4]也是有效的答案
示例 2:
输入: nums = [6,6,5,6,3,8]
输出: [6,6,5,6,3,8]
提示:
1 <= nums.length <= 5 * 104
0 <= nums[i] <= 104
输入的 nums
保证至少有一个答案。
进阶: 你能在 O(n)
时间复杂度下解决这个问题吗?
解法
方法一
Python3 Java C++ Go
class Solution :
def wiggleSort ( self , nums : List [ int ]) -> None :
"""
Do not return anything, modify nums in-place instead.
"""
for i in range ( 1 , len ( nums )):
if ( i % 2 == 1 and nums [ i ] < nums [ i - 1 ]) or (
i % 2 == 0 and nums [ i ] > nums [ i - 1 ]
):
nums [ i ], nums [ i - 1 ] = nums [ i - 1 ], nums [ i ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Solution {
public void wiggleSort ( int [] nums ) {
for ( int i = 1 ; i < nums . length ; ++ i ) {
if (( i % 2 == 1 && nums [ i ] < nums [ i - 1 ] ) || ( i % 2 == 0 && nums [ i ] > nums [ i - 1 ] )) {
swap ( nums , i , i - 1 );
}
}
}
private void swap ( int [] nums , int i , int j ) {
int t = nums [ i ] ;
nums [ i ] = nums [ j ] ;
nums [ j ] = t ;
}
}
class Solution {
public :
void wiggleSort ( vector < int >& nums ) {
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 ]);
}
}
}
};
func wiggleSort ( nums [] int ) {
for i := 1 ; i < len ( nums ); i ++ {
if ( i % 2 == 1 && nums [ i ] < nums [ i - 1 ]) || ( i % 2 == 0 && nums [ i ] > nums [ i - 1 ]) {
nums [ i ], nums [ i - 1 ] = nums [ i - 1 ], nums [ i ]
}
}
}