Google 2016 面试题 2 | 摆动排序 II
2016-03-24 17:29
447 查看
Google 2016 面试题 2 | 摆动排序 II
题目描述给出一个整数数组nums,重新排列nums使得nums[0] < nums[1] > nums[2] < nums[3]...Example:
nums = [1, 5, 1, 1, 6, 4], 一个可能的答案是
[1, 4, 1, 5, 1, 6]数据保证必定有解。分析解答本题有一种简单的做法,先快速排序,然后把最小的一半依次放在奇数位上,最大的一半依次放在偶数位上。算法复杂度是快速排序的复杂度O(NlogN)。仔细思考后发现快速排序不是必要的,只需要找到中位数即可。利用快速排序的思想找中位数的期望时间复杂度是O(N)。为了防止相等的数放在一起,需要注意放置的顺序。笔者采用的方法是依nums长度分两种情况:若长度为奇数,把比中位数小的依次放在0,2,4,...位置,比中位数大的依次放在length-2,length-4,...位置;若长度为偶数,把比中位数小的依次放在length-2,length-4,...位置,比中位数大的依次放在1,3,5,...位置。其余位置填充中位数。这样可以保证中位数一定与较小与较大的数相邻(题目保证一定有解)。参考程序面试官角度分析因为本题O(N)时间复杂度是额外要求,完成快速排序算法可以达到hire,给出O(N)算法和程序可以达到strong hire。
相关文章推荐
- Google面试题 3| 矩阵中的最长上升路径
- Google 2016 面试题5 | 岛屿计数2
- Google 2016 面试题6 | Count of Smaller Numbers After Self(数组计数)
- Facebook 2016 面试题1 | 递增三元组子序列
- 程序员开发常使用小工具
- 整理 《招聘一个靠谱的iOS》面试题部分参考答案
- 《码农增刊 码农好爸爸》的笔记
- 《码农·码农论剑(第22期)》的笔记
- 操作系统面试题
- 《码农(第12期)》的笔记
- 想知道吗?CTO 比普通程序员强在哪?
- 想知道吗?CTO 比普通程序员强在哪?
- 阿里巴巴面试题
- 数据库面试常问的一些基本概念
- 剑指Offer面试题5——倒序输出一个链表
- 剑指offer面试题6:重建二叉树
- 程序员:让你的腹部瞬间显瘦,只差一个动作!
- 女码农献丑-企业智能机器人客服(图灵机器人)
- day04 面试题Schema约束与DTD约束的区别
- 前端面试题笔记