
【Lintcode】31. Partition Array
发布日期:2021-05-03 18:44:36
浏览次数:19
分类:精选文章
本文共 1102 字,大约阅读时间需要 3 分钟。
题目地址:
给定一个数组,再给定一个数 k k k,要求将数组重排,使得存在某个位置 x x x,其前的数都是小于 k k k的,其与其后的数都是大于等于 k k k的。
直接套用快排的模板即可。需要注意的是由于最后要返回位置 x x x,我们还需要判断一下快排完成后的pivot是不是第一个大于等于 k k k的位置。代码如下:
public class Solution { /** * @param nums: The integer array you should partition * @param k: An integer * @return: The index after partition */ public int partitionArray(int[] nums, int k) { // write your code here if (nums == null || nums.length == 0) { return 0; } int i = 0, j = nums.length - 1; int tmp = nums[j]; while (i < j) { while (i < j && nums[i] < k) { i++; } nums[j] = nums[i]; while (i < j && nums[j] >= k) { j--; } nums[i] = nums[j]; } // 将pivot放回去 nums[i] = tmp; // 此时i左边的数已经都小于k,i右边的数已经都大于等于k了 // 所以如果nums[i]大于等于k,那么nums[i]就是第一个大于等于k的数; // 否则或者nums[i + 1]是第一个大于等于k的数,或者大于等于k的数不存在,这两者都返回i + 1 return tmp >= k ? i : i + 1; }}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月30日 20时28分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
程序员应该知道的97件事
2019-03-05
create-react-app路由的实现原理
2019-03-05
Linux环境变量配置错误导致命令不能使用(杂谈)
2019-03-05
openstack安装(九)网络服务的安装--控制节点
2019-03-05
shell编程(六)语言编码规范之(变量)
2019-03-05
vimscript学习笔记(二)预备知识
2019-03-05
Android数据库
2019-03-05
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2019-03-05
STM8 GPIO模式
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05
C语言实现dijkstra(adjacence matrix)
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
C++&&STL
2019-03-05
子集(LeetCode 78)
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
mxsrvs支持thinkphp3.2伪静态
2019-03-05