求排序算法思路,使得 array[0]<array[1]>array[2]<array[3]...

2017-11-27 21:04:29 +08:00
 liemehoc

python,如输入[8,8,4,6,2,7],输出[4,8,6,7,2,8]

3629 次点击
所在节点    Python
20 条回复
blueset
2017-11-27 21:18:55 +08:00
排序,然后左右交替取数?

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
jzy
2017-11-27 21:19:00 +08:00
从小到大排序,前面一半放奇数位,后面一半放偶数位。如果奇数位和偶数位首位相等,应该是无解了
momocraft
2017-11-27 21:20:44 +08:00
先排成升序然后反复横跳地取: arr[3] --(向左)-- arr[2] --(向右)-- arr[4] --(向左)--
lhx2008
2017-11-27 21:21:38 +08:00
答案不唯一呀,还要随机分布么
ballshapesdsd
2017-11-27 21:29:00 +08:00
leetcode 上有这道题。。一模一样的
liemehoc
2017-11-27 21:30:56 +08:00
@blueset
@jzy
@momocraft
我第一反应也是这个,不知道有没有更优雅的解法


@lhx2008 是的,能不能算出所有有效解
liemehoc
2017-11-27 21:32:09 +08:00
@ballshapesdsd 名字叫啥
ballshapesdsd
2017-11-27 21:38:01 +08:00
@liemehoc 噗,找了半天
https://leetcode.com/problems/wiggle-subsequence/description/
o(n)时间复杂度的解法
liemehoc
2017-11-27 21:48:09 +08:00
@ballshapesdsd 学习了,解法有意思
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 顺序排列呢?
jmc891205
2017-11-27 23:22:34 +08:00
@SlipStupig
[dict_a[k] for k in list_a]这样?
dangoron
2017-11-27 23:28:18 +08:00
shell sort 做到一半的感觉。。
panda0
2017-11-28 00:28:46 +08:00
@jmc891205 这样是个 list 了吧
nondanee
2017-11-28 01:53:40 +08:00
@SlipStupig dict 就是无序的呀,用 collections.OrderedDict 哇
LukeXuan
2017-11-28 03:07:00 +08:00
找到中位数(O(n)),然后比中位数小的放在偶数位,大的放在奇数位。
vegito2002
2017-11-28 03:33:32 +08:00
Wiggle Sort, Google 原题, LC 上面有
SlipStupig
2017-11-28 07:24:14 +08:00
@jmc891205 哈哈,好像是这样,但是如果是两个 list 呢?
dangyuluo
2017-11-28 08:36:35 +08:00
我觉得答案不唯一吧。
leetao94
2017-11-28 08:41:54 +08:00
liemehoc
2017-11-29 10:47:49 +08:00
@vegito2002
@dangyuluo
@leetao94
扩展一下问题,如果要求所有满足规则的解呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/410029

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX