给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
所有小于k的元素移到左边
所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。
样例
给出数组 nums = [3,2,2,1] 和 k = 2,返回 1.
先排序,然后使用二分查找:
class Solution {
public:
int partitionArray(vector<int> &nums, int k) {
// write your code here
sort(nums.begin(),nums.end());
int left = 0,right = nums.size();
while (left < right) {
int mid = (left + right) / 2;
if (nums[mid] >= k) right = mid;
else left = mid + 1;
}
return right;
}
};
好吧这是二逼的方法,强行改变题目意图,其实这道题是快速排序的一步。。。。。。。
class Solution {
public:
int partitionArray(vector<int> &nums, int k) {
// write your code here
int num = 0;
for(int i = 0;i < nums.size();i++)
{
if(nums[i] < k)
{
swap(nums[i],nums[num]);
num++;
}
}
return num;
}
};
网友评论