码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]Majority Element

时间:2014-12-22 14:22:04      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

超过了一半是这个数,所以排个顺,第n/2个也就是中间那个就是我们要的。。。

但是我们也没必要全部排序,只要找到第n/2个就好了。。。

 

class Solution {
public:
    int find_kth(vector<int>& num, int left, int right, int k) {
        if (left == right) {
            return num[k];
        }
        int l = left;
        int r = right;
        swap(num[l], num[(l+r)/2]);
        int mid = num[l];
        while(l < r) {
            while(l < r && num[r] >= mid) r--;
            if (r > l) num[l++] = num[r];
            while(l < r && num[l] < mid) l++;
            if (r > l) num[r--] = num[l];
        }
        num[l] = mid;
        if (l >= k) return find_kth(num, left, l, k);
        else return find_kth(num, l + 1, right, k);
    }
    int majorityElement(vector<int> &num) {
        return find_kth(num, 0, num.size() - 1, num.size() / 2);
    }
};

 

[leetcode]Majority Element

标签:

原文地址:http://www.cnblogs.com/x1957/p/4177970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!