python,如输入[8,8,4,6,2,7],输出[4,8,6,7,2,8]
1
blueset 2017-11-27 21:18:55 +08:00 via Android
排序,然后左右交替取数?
8 8 4 6 2 7 → 2 4 6 7 8 8 2 4 6 (7 8 8) - 8 8 7 (6 4 2) 2 <= 8 >= 4 <= 8 >= 6 <= 7 |
2
jzy 2017-11-27 21:19:00 +08:00 via iPhone
从小到大排序,前面一半放奇数位,后面一半放偶数位。如果奇数位和偶数位首位相等,应该是无解了
|
3
momocraft 2017-11-27 21:20:44 +08:00
先排成升序然后反复横跳地取: arr[3] --(向左)-- arr[2] --(向右)-- arr[4] --(向左)--
|
4
lhx2008 2017-11-27 21:21:38 +08:00 via Android
答案不唯一呀,还要随机分布么
|
5
ballshapesdsd 2017-11-27 21:29:00 +08:00
leetcode 上有这道题。。一模一样的
|
6
liemehoc OP |
7
liemehoc OP @ballshapesdsd 名字叫啥
|
8
ballshapesdsd 2017-11-27 21:38:01 +08:00 1
|
9
liemehoc OP @ballshapesdsd 学习了,解法有意思
|
10
SlipStupig 2017-11-27 23:03:15 +08:00
我今天也遇到类似的问题:
python: list_a = ['m', 'z', 'k', 'i'] dict_a = {'z': 2, ‘ k ’: 3, 'm':'a', 'i': -1} dict_a 有什么办法能优雅的按照 list_a 中的 key 顺序排列呢? |
11
jmc891205 2017-11-27 23:22:34 +08:00
@SlipStupig
[dict_a[k] for k in list_a]这样? |
12
dangoron 2017-11-27 23:28:18 +08:00 via Android
shell sort 做到一半的感觉。。
|
14
nondanee 2017-11-28 01:53:40 +08:00 via Android
@SlipStupig dict 就是无序的呀,用 collections.OrderedDict 哇
|
15
LukeXuan 2017-11-28 03:07:00 +08:00
找到中位数(O(n)),然后比中位数小的放在偶数位,大的放在奇数位。
|
16
vegito2002 2017-11-28 03:33:32 +08:00
Wiggle Sort, Google 原题, LC 上面有
|
17
SlipStupig 2017-11-28 07:24:14 +08:00
@jmc891205 哈哈,好像是这样,但是如果是两个 list 呢?
|
18
dangyuluo 2017-11-28 08:36:35 +08:00
我觉得答案不唯一吧。
|
19
leetao94 2017-11-28 08:41:54 +08:00
leetcode 的中类似的一题,http://www.leetao94.cn/2017/08/24/Wiggle%20Sort%20II/
|
20
liemehoc OP |