lintcode之数组划分
2016-04-21 21:59
375 查看
题目:
给出一个整数数组nums和一个整数k。划分数组(即移动数组nums中的元素),使得:
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k。
解答:
两个指针交换
注意边界和只在l < r的时候才能进行交换
class Solution {
public:
int partitionArray(vector<int> &nums, int k) {
// write your code here
int l = 0;
int r = nums.size() - 1;
while (l < r) {
while (l < nums.size() && nums[l] < k)
l++;
while (r >= 0 && nums[r] >= k)
r--;
if (l == nums.size())
return nums.size();
if (r == -1)
return 0;
if (l < r) {
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
}
}
return l;
}
};
给出一个整数数组nums和一个整数k。划分数组(即移动数组nums中的元素),使得:
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k。
解答:
两个指针交换
注意边界和只在l < r的时候才能进行交换
class Solution {
public:
int partitionArray(vector<int> &nums, int k) {
// write your code here
int l = 0;
int r = nums.size() - 1;
while (l < r) {
while (l < nums.size() && nums[l] < k)
l++;
while (r >= 0 && nums[r] >= k)
r--;
if (l == nums.size())
return nums.size();
if (r == -1)
return 0;
if (l < r) {
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
}
}
return l;
}
};
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总