Wiggle Sort 解答

时间:2021-11-16 02:01:58

Question

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].

Solution 1

仔细观察题目,有个条件很重要就是nums[0] <= nums[1] >= nums[2] <= nums[3]....也就是说对于奇书的 i 我们要保证 nums[i - 1] <= nums[i] <= nums[i + 1] 所以第一个想法是1. 先排序 2. 交换每个nums[i] 和 nums[i + 1]

Time complexity O(n log n).

 public class Solution {
public void wiggleSort(int[] nums) {
if (nums == null || nums.length < 2)
return;
Arrays.sort(nums);
for (int i = 1; i < nums.length - 1; i = i + 2) {
int tmp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = tmp;
}
}
}

Solution 2

分奇偶来思考。

如果i是奇数,那么nums[i]应该大于nums[i - 1],否则交换

如果i是偶数,那么nums[i]应该小于nums[i - 1],否则交换

 public class Solution {
public void wiggleSort(int[] nums) {
if (nums == null)
return;
for (int i = 1; i < nums.length; i++) {
if (i % 2 == 1) {
if (nums[i] < nums[i - 1])
swap(nums, i, i - 1);
} else {
if (nums[i] > nums[i - 1])
swap(nums, i, i - 1);
}
}
}
private void swap(int[] nums, int x, int y) {
int tmp = nums[x];
nums[x] = nums[y];
nums[y] = tmp;
}
}

Wiggle Sort 解答的更多相关文章

  1. &lbrack;LeetCode&rsqb; Wiggle Sort II 摆动排序

    Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...

  2. &lbrack;LeetCode&rsqb; Wiggle Sort II 摆动排序之二

    Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...

  3. &lbrack;LeetCode&rsqb; Wiggle Sort 摆动排序

    Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...

  4. Leetcode 280&period; Wiggle Sort

    Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...

  5. &lbrack;LintCode&rsqb; Wiggle Sort II 扭动排序之二

    Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...

  6. &lbrack;LintCode&rsqb; Wiggle Sort 扭动排序

    Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...

  7. lintcode:Wiggle Sort II

    Wiggle Sort II Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] ...

  8. lintcode:Wiggle Sort

    Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= ...

  9. &lbrack;Locked&rsqb; Wiggle Sort

    Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= ...

随机推荐

  1. HDU-4035 Maze (概率DP求期望)

    题目大意:在一个树形迷宫中,以房间为节点.有n间房间,每间房间存在陷阱的概率为ki,存在出口的概率为ei,如果这两种情况都不存在(概率为pi),那么只能做出选择走向下一个房间(包括可能会走向上一个房间 ...

  2. 【Android Studio使用教程2】Android Studio创建项目

    创建项目 首先,先指出Android Studio中的两个概念. Project 和 Module .在Android Studio中, Project 的真实含义是工作空间, Module 为一个具 ...

  3. jquery中的 ajax 以及map遍历

    1.语法 $.ajax{ type:'get',//类型 有get post url:'',//路径 data:{name:$('#ma').val(),nameq:$('#maq').val()}, ...

  4. Linux查看物理CPU个数、核数、逻辑CPU个数 &lpar;转&rpar;

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...

  5. 随机数、continue、break

    arc4random() — 返回一个随机数(无符号整型).  如果要随机一个 [a, b]范围内的整数  公式:arc4random() % (b - a + 1) + a; #include &l ...

  6. 用Python做SVD文档聚类---奇异值分解----文档相似性----LSI(潜在语义分析)

    转载请注明出处:电子科技大学EClab——落叶花开http://www.cnblogs.com/nlp-yekai/p/3848528.html SVD,即奇异值分解,在自然语言处理中,用来做潜在语义 ...

  7. &lt&semi;EffectiveJava&gt&semi;读书笔记--02泛型数组

    1, java中可以申明泛型类型的数组引用; 2, 但是不能实例化一个泛型数组对象; 3, 针对第二点, 可以曲线救国, 实例化一个Object数组, 再进行类型强转; 见代码如下: public c ...

  8. BZOJ 5093&lbrack;Lydsy1711月赛&rsqb;图的价值 线性做法

    博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里 惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波 幂与第二类斯特林数 推导看这里 $$ x^k=\sum ...

  9. python函数注释&comma;参数后面加冒号&colon;&comma;函数后面的箭头&srarr;是什么?

    https://blog.csdn.net/sunt2018/article/details/83022493

  10. C&plus;&plus;程序设计方法3:自动类型转换

    方法1:在源类中定义目标类型转换运算符 #include <iostream> using namespace std; class Dst { public: Dst() { cout ...