九章算法面试题39 分割数组
来源:互联网 发布:php tp框架 编辑:程序博客网 时间:2024/04/28 11:06
九章算法官网-原文网址
http://www.jiuzhang.com/problem/39/
题目
给一个数组A,和一个整数k,将数组分成两个部分(你可以移动数组中的数),使得左边部分的数都<k,右边部分的数都>=k。要求使用O(1)的额外空间,和O(n)的时间。
解答
利用快速排序的思想。用两根指针i和j,一根指向头,一根指向尾,将头移动到第一个不满足A[i]<k的数,将尾巴移动到第一个不满足A[j]>=k的数,交换两个数,然后重复往下查找不满足A[i]<k和A[j]>=k的数,继续交换。直到两根指针碰头。python代码如下:
i, j = 0, len(A) -1
while i <= j:
while i < j and A[i] < k:
i += 1
while i < j and A[j] >= k:
j -= 1
if i <= j:
A[i], A[j] = A[j], A[i] #swap
i += 1
j -= 1
面试官角度
本题的考点是快排。如果写过快排或者明白快排的原理,很快就会明白这个题目只是快速排序中间的一个部分。两根指针一头一尾的这种方式,往期的题目中,第32题小球排序也是利用了类似的思路。读者可以将两个题目联系起来,找到共性,有利于思路的整理和归纳。
0 0
- 九章算法面试题39 分割数组
- 九章算法面试题84 奇偶分割数组
- 九章算法面试题48 分割回文串
- 九章算法面试题5 有序数组合并
- 九章算法面试题33 数组波峰
- 九章算法面试题86 合并排序数组
- 九章算法面试题87 最小子数组
- 九章算法面试题3 找坏球
- 九章算法面试题28 链表找环
- 九章算法面试题71 平方根
- 九章算法面试题74 中位数
- 九章算法面试题31 子数组的最大差
- 九章算法面试题62 合并k个排序数组
- 九章算法面试题83 把0移到数组右边
- lintcode&九章算法——Google 面试题 | 数组的度数 ? 待解决
- 九章算法 | Facebook 面试题 : Backpack VI 背包算法
- [经典面试题][网易]数组分割
- 面试题之九章算法 字符串编辑距离
- linux一些命令记录
- 数据挖掘150道试题 学会你也具有专业能力
- java 获取系统信息
- Linux系统下 连接器ld链接顺序的总结
- snmp
- 九章算法面试题39 分割数组
- 堆,栈的区别分析
- 【HTML/XML 2】XML基础知识点总结
- Leetcode Balanced Binary Tree 平衡二叉树
- [LeetCode] Minimum Depth of Binary Tree
- 在myeclipse中根据数据库中的表格自动生成类
- 使用ibatis框架配置文件的格式
- IE浏览器cookie存放在本地什么目录
- 马赛克是阻止人类文明进步的绊脚石