Java版本:先将数组排序,从中间将排好序的数组分为small部分和large部分。

每次从小区间找一个值插入偶数位,从大区间找一个值插入奇数位。

 public void wiggleSort(int[] nums) {
int[] temp = Arrays.copyOfRange(nums, , nums.length);
Arrays.sort(temp);
//中间点,左侧都是小值
int small = temp.length / + (temp.length % == ? - : );
//右侧都是大值
int large = temp.length - ;
for (int i = , j = ; i < temp.length; i += , j += ) {
if (j < temp.length) {
//用大值插入odd位置
nums[j] = temp[large--];
}
//用小值插入even位置
nums[i] = temp[small--];
}
}

补充一个python的版本:

 class Solution:
def wiggleSort(self, nums: 'List[int]') -> None:
temp = sorted(nums)
n = len(nums)
mid = n // 2 + n % 2
p1 = temp[:mid]
p2 = temp[mid:]
i =
j =
k =
while k < n:
if k % == :
temp[k] = p1[i]
k +=
i +=
else:
temp[k] = p2[j]
k +=
j +=
print(temp)
for i in range(,n):
if temp[i-] == temp[i]:
nums.clear()
nums.extend(temp[i:])
nums.extend(temp[:i])
print(nums)
return
nums.clear()
nums.extend(temp)

leetcode324的更多相关文章

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

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

  2. leetcode324 摆动排序II

      1. 首先考虑排序后交替插入 首尾交替插入,这种方法对于有重复数字的数组不可行: class Solution { public: void wiggleSort(vector<int> ...

  3. leetcode探索高级算法

    C++版 数组和字符串 正文 链表: 正文 树与图: 树: leetcode236. 二叉树的最近公共祖先 递归(先序) leetcode124二叉树最大路径和 递归 图: leetcode 547朋 ...

随机推荐

  1. 实验吧—Web——WP之 头有点大

    3. 首先看一下 .net framework 9.9 并没有9.9版本 可以考虑浏览器伪装用户代理 就得了解User-Agent ???何为user-agent User-Agent是Http协议中 ...

  2. 【多线程学习笔记整理】002_线程的停止、暂停、与yield

    一.停止线程的三种方式 停止线程是多线程中的一个很重要的点,停止线程意味着在线程处理完当前任务之前终止正在做的操作,但是如果不能正确的操作,可能会发生不可预期的结果. 1)使用退出标志,使线程正常退出 ...

  3. LG2044 [NOI2012]随机数生成器

    题意 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a,c ...

  4. Dataframe 取列名

    1.[column for column in df] 2.df.columns.values 返回 array 3.list(df) 4.df.columns 返回Index,可以通过 tolist ...

  5. java新的语法糖:Java 8 Lambda表达式

    ***************************************************************************

  6. smarty学习——内建函数 部分

    Smarty自带一些内建函数. 内建函数是模板语言的一部分. 用户不能创建名称和内建函数一样的自定义函数,也不能修改内建函数. 一.包含的内建函数 {$var=...}{append}{assign} ...

  7. windows 版nginx 的一些基础知识

    nginx的Windows版本使用原生Win32 API(非Cygwin模拟层).当前nginx/Windows只使用select作为通知方法,所以不要期待它有很高的性能和扩展性.鉴于这点和一些已知问 ...

  8. js基础(常用语法、类型、函数)

    js函数集 ·字符串(String)  1.声明  var myString = new String("Every good boy does fine.");  var myS ...

  9. 彻底删除vscode及安装的插件和个人配置信息

    1.卸载vscode应用软件(在控制面板里面找不到改软件,所以只能进入应用所在文件夹进行卸载) ## 此步骤虽然删掉了应用软件,但是此时重新安装会发现之前下载的插件和个人配置信息都还会重新加载出来,所 ...

  10. ereg()替换为preg_match(),ereg_repalce替换为preg_replace得加斜杠

    PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”是因为它长ereg 函数进行了升级处理,需要像preg_match使用/ /来 ...