lintcode 数组划分

2016-12-18  本文已影响52人  yzawyx0220

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

猜你喜欢

热点阅读