摆动排序 II

题目;给一个数组,让后把它摆动排序。比如给[[1, 5, 1, 1, 6, 4],排序之后是[1, 4, 1, 5, 1, 6];   给[1, 3, 2, 2, 3, 1],排序之后是[2, 3, 1, 3, 1, 2]

思路:题目实际要求O(n),但是没想到,简单的做法,先排序,然后从中间分成大小两部分,小的部分从中间到左边取,大的部分从右边往中间取。但是要先复制一份数组对它排序,然后用排好序的对原数组赋值。。

public class Solution {
    public void wiggleSort(int[] nums) {
        int n = nums.length;
        if(n == 0) return ;
        int[] a = Arrays.copyOfRange(nums,0,n);
        Arrays.sort(a);
        int k = 0 , p = (n-1)/2, q = n-1;
        boolean sign = true;     //sign控制交替赋值
        while(k < n){
            if(sign) nums[k++]=a[p--];
            else nums[k++]=a[q--];
            sign = !sign;
        }
    }
}
时间: 2024-10-03 13:46:24

摆动排序 II的相关文章

324. 摆动排序 II(三路划分算法)

题目: 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]示例 2: 输入: nums = [1, 3, 2, 2, 3, 1]输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2]说明:你可以假设所有输入都会得到有效的结果. 进阶:你能用 O(n) 时间复杂度和

[Leetcode] 第324题 摆动排序II

一.题目描述 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [1, 5, 1, 1, 6, 4] 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6] 示例 2: 输入: nums = [1, 3, 2, 2, 3, 1] 输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2] 说明:你可以假设所有输入都会得到有效的结果. 进阶:你能用 O(n)

[Swift]LeetCode324. 摆动排序 II | Wiggle Sort II

Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3].... Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Output: One possible answer is [1, 4, 1, 5, 1, 6]. Example 2: Input: nums = [1, 3, 2, 2, 3, 1] Output: One po

hlg1287数字去重和排序II【hash】

大意: 告诉你n个数让你把其中重复的数字保留一个并且排序输出 分析: 每读入一个数若未出现过就把这个数存起来 昨天re无数次原因是输出的时候我是先输出的第一个然后把每个依次输出 这就有一个问题就是如果只有一个元素的还要访问第一个元素从而造成re 代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace

LeetCode 280. Wiggle Sort (摆动排序)$

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]. 题目标签:Array, Sort 题目给了我们一个nums array, 让我们wiggle sort.

哈理工oj Hrbustacm 1287 数字去重和排序II(STL 或着 hash 拉链法)

水题 STL map也能过,但是为了练习拉链hash /*============================================================================= # # Author: liangshu - cbam # # QQ : 756029571 # # School : 哈尔滨理工大学 # # Last modified: 2015-08-26 18:36 # # Filename: C.cpp # # Description: #

【西北大学2019新生赛】序列排序II

原题: 想了很久,想的是模仿冒泡,从大到小检查每一个数后面的数是否都与它互质,然后把它设为1(等价于放到最后不考虑) 然后一直想数据结垢 出来跟人交流,“这不是挺典型的思维题么哈哈哈” 利用性质: 调和级数求和,当n=1e5时n/1+n/2+...+n/n约等于1e7 这个性质至少是第二次见了,拿个小本子记下来 或者说需要注意到性质: 小于等于n的数中是k的倍数的数有n/k个 看上去非常简单但是好像还挺容易被我忽略的哈哈 方式方法: 枚举gcd 涉及到整除互质之类的,枚举gcd好像也非常常见 所

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表

LeetCode 75. 颜色分类(Sort Colors) 30

75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. 注意: 不能使用代码库中的排序函数来解决这道题. 每日一算法2019/6/2Day 30LeetCode75. Sort Colors 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方