数组划分——LintCode
2015-12-11 13:03
309 查看
给出一个整数数组nums和一个整数k。划分数组(即移动数组nums中的元素),使得:
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组nums=[3,2,2,1]和 k=2,返回 1
注意
你应该真正的划分数组nums,而不仅仅只是计算比k小的整数数,如果数组nums中的所有元素都比k小,则返回nums.length。
挑战
要求在原地使用O(n)的时间复杂度来划分数组
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组nums=[3,2,2,1]和 k=2,返回 1
注意
你应该真正的划分数组nums,而不仅仅只是计算比k小的整数数,如果数组nums中的所有元素都比k小,则返回nums.length。
挑战
要求在原地使用O(n)的时间复杂度来划分数组
public class Solution { /** *@param nums: The integer array you should partition *@param k: As description *return: The index after partition */ public int partitionArray(int[] nums, int k) { //write your code here int a = 0; int b = nums.length-1; while(a < b) { while(nums[a] < k && a < b) { a++; } while(nums[b] >= k && b > a) { b--; } if(nums[a] > nums[b]) { int x = nums[a]; nums[a] = nums[b]; nums[b] = x; } } if(a == nums.length-1) return nums.length; return a; } }
相关文章推荐
- TCP和UDP 协议发送数据包的大小
- Median of Two Sorted Arrays
- 集合元素重复问题
- Scala:object(单例)
- IE、FireFox、Chrome浏览器的全屏实现
- 两数之和
- 三数之和 II——LintCode
- Count Primes
- SPOJ COT Count on a tree
- APP原型设计工具,哪家强?转自知乎
- Cocos2d-x 脚本语言Lua基本语法
- 三数之和——LintCode
- rails 4 里面 用 link_to 来生成 delete调用,
- 十大编程算法助程序员走上高手之路
- Centos查看端口占用情况和开启端口命令
- Hadoop教程(四):理解MapReduce、MapReduce计数器和连接、MapReduce Hadoop程序连接数据
- MyEclipse提示注册码MyEclipse Trial Expired解决方案
- 派生类到基类的转换 和基类到派生类的转换
- linux硬链接与软链接
- Gson解析内存溢出