美文网首页
lintcode 数组划分

lintcode 数组划分

作者: yzawyx0220 | 来源:发表于2016-12-18 20:09 被阅读52次

    给出一个整数数组 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;
        }
    };
    

    相关文章

      网友评论

          本文标题:lintcode 数组划分

          本文链接:https://www.haomeiwen.com/subject/efdzmttx.html