• [leetcode]Majority Element


    超过了一半是这个数,所以排个顺,第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);
        }
    };

     换个写法

    class Solution {
    public:
        int majorityElement(vector<int> &num) {
            int cnt = 1;
            int b = num[0];
            for (int i = 1; i < num.size(); i++) {
                if (b == num[i]) {
                    cnt++;
                } else {
                    cnt--;
                    if (cnt == 0) {
                        b = num[i];
                        cnt++;
                    }
                }
            }
            return b;
        }
    };
  • 相关阅读:
    细说Cookie(转)
    Custom Exception in ASP.NET Web API 2 with Custom HttpResponse Message
    内核中的定时器
    ibus拼音安装_ubuntu10.04
    linux模块
    zebra/quagga线程分析
    vim常用配置
    rar安装和使用
    zebra/quagga
    netsnmp编译动态库
  • 原文地址:https://www.cnblogs.com/x1957/p/4177970.html
Copyright © 2020-2023  润新知