Java实现-数组划分
2017-06-17 12:13
549 查看
给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。
注意事项
你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组 nums =
k =
挑战
使用 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
if(nums.length==0)
return 0;
int l=0;
int r=nums.length-1;
while(l<r){
while(l<r&&nums[l]<k)
l++;
while(l<r&&nums[r]>=k)
r--;
int temp=nums[l];
nums[l]=nums[r];
nums[r]=temp;
}
if(nums[nums.length-1]<k)
return nums.length;
return l;
}
}
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。
注意事项
你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组 nums =
[3,2,2,1]和
k =
2,返回
1.
挑战
使用 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
if(nums.length==0)
return 0;
int l=0;
int r=nums.length-1;
while(l<r){
while(l<r&&nums[l]<k)
l++;
while(l<r&&nums[r]>=k)
r--;
int temp=nums[l];
nums[l]=nums[r];
nums[r]=temp;
}
if(nums[nums.length-1]<k)
return nums.length;
return l;
}
}
相关文章推荐
- 快速排序+划分数组(java实现)
- 用java实现对数组的排列组合
- JAVA 用数组实现环型队列
- 实现AMF3与Java之间数组的传递(动态创建数组)...
- Java实现数组形式的多项式加法、减法、乘法、相除运算
- Java基于可扩充数组的向量实现(算法源码)
- 栈的数组实现_JAVA描述《数据结构与算法分析》
- java 基于数组实现的队列
- 数据结构复习:栈-Java数组实现
- Java实现数组排序总结篇(冒泡,选择,插入,希尔)
- 用JAVA实现堆栈(数组篇)
- Java写的DES源代码(数组实现)
- JAVA实现:给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里
- 数组排序的Java实现(Sorting of arrays implemented with Java)
- 数据结构复习:队列-Java数组实现
- 数组实现的约瑟夫问题(Java)
- Java 实践(Netbeans开发)——StringTokenizer实现数组分割
- JAVA里实现一个数组全排列的方法
- 第2章 Java编程基础——FAQ2.26 如何实现数组的复制?
- java 基于数组的栈的实现