[LeetCode] 280. Wiggle Sort 摆动排序
2024-09-06 02:51:36
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] >= nums[2] <= nums[3]....的样子,要求in-place。
解法:遍历一遍数组, 如果是奇数位置并且其值比下一个大,则交换其值, 如果是偶数位置并且其值比下一个小, 则交换其值. 时间复杂度是O(N)。注意index和实际的位置差1,所以奇偶相反。
Java:
public class Solution {
public void wiggleSort(int[] nums) {
if (nums == null || nums.length < 2) return;
for (int i = 1; i < nums.length; i++) {
if ((i % 2 == 0 && nums[i] > nums[i - 1]) || (i % 2 == 1 && nums[i] < nums[i - 1])) {
int tmp = nums[i];
nums[i] = nums[i - 1];
nums[i - 1] = tmp;
}
}
}
}
Java:
public class Solution {
public void wiggleSort(int[] nums) {
if (nums == null || nums.length == 0) {
return;
}
for (int i = 1; i < nums.length; i++) {
if (i % 2 == 1) {
if (nums[i] < nums[i - 1]) {
swap(nums, i);
}
} else {
if (nums[i] > nums[i - 1]) {
swap(nums, i);
}
}
}
} private void swap(int[] nums, int i) {
int tmp = nums[i - 1];
nums[i - 1] = nums[i];
nums[i] = tmp;
}
}
Python:
# Time: O(n)
# Space: O(1)
class Solution(object):
def wiggleSort(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
for i in xrange(1, len(nums)):
if ((i % 2) and nums[i - 1] > nums[i]) or \
(not (i % 2) and nums[i - 1] < nums[i]):
# Swap unordered elements.
nums[i - 1], nums[i] = nums[i], nums[i - 1]
C++:
// Time: O(n)
// Space: O(1)
class Solution {
public:
void wiggleSort(vector<int>& nums) {
for (int i = 1; i < nums.size(); ++i) {
if (((i % 2) && nums[i] < nums[i - 1]) ||
(!(i % 2) && nums[i] > nums[i - 1])) {
// Swap unordered elements.
swap(nums[i], nums[i - 1]);
}
}
}
};
C++:
// Time Complexity O(nlgn)
class Solution {
public:
void wiggleSort(vector<int> &nums) {
sort(nums.begin(), nums.end());
if (nums.size() <= 2) return;
for (int i = 2; i < nums.size(); i += 2) {
swap(nums[i], nums[i - 1]);
}
}
};
C++:
// Time Complexity O(n)
class Solution {
public:
void wiggleSort(vector<int> &nums) {
if (nums.size() <= 1) return;
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]);
}
}
}
};
类似题目:
[LeetCode] Wiggle Sort II 摆动排序 II
All LeetCode Questions List 题目汇总
最新文章
- MVC项目
- Optimizely:在线网站A/B测试平台
- P1090 合并果子
- C#实现GDI+基本图的缩放、拖拽、移动
- [jobdu]孩子们的游戏(圆圈中最后剩下的数)
- Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单
- 天梯赛决赛 L2-1.红色警报 并查集
- 如何提高使用Java反射的效率?
- java高级工程师开放面试题集<;二>;
- 在Linux 中如何从进程相关的文件描述中恢复数据
- JavaScript进阶系列02,函数作为参数以及在数组中的应用
- Boosting 简单介绍
- java 可变参数讲解
- 【Linux】linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法
- Hibernate中的一些关键字理解
- “全栈2019”Java第十章:关键字
- liunx下在线升级python到2.7版本
- CF1025C Plasticine zebra【环状字符串/思维】
- 台湾ML笔记--1.1什么时候适合使用ML
- android中使用gdbserver调试c程序
热门文章
- Codeforces B. Mouse Hunt(强连通分解缩点)
- moviepy草码
- Please umount the filesystem and rectify the problem(s)
- C# 验证控件的使用RequiredFieldValidator&;CompareValidator
- 《基于 UML 的教务系统设计方法研究》论文笔记(十五)
- Java基础(八 前面补充)
- Git的基本使用方法(受益匪浅)
- .pdb 文件的内部结构
- 关于Windows系统里的事后调试
- Dump文件的校验查看工具