<LeetCode> 题31:数组划分

来源:互联网 发布:linux 显示文件夹内容 编辑:程序博客网 时间:2024/06/11 16:55

题目描述:

给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
–>所有小于k的元素移到左边
–>所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。

注意事项:

你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length。
例如:
给出数组 nums = [3,2,2,1] 和 k = 2,返回 1。

代码:

class Solution {public:    int partitionArray(vector<int> &nums, int k)    {        if(nums.size() == 0)        {            return 0;        }        int i = 0;        int j = nums.size() - 1;        while(i <= j)        {            while(i <= j && nums[i] < k)            {                i++;            }            while(i <= j && nums[j] >= k)            {                j--;            }            if(i <= j)            {                swap(nums[i], nums[j]);                i++;                j--;            }        }        return i;    }};
0 0