zoukankan      html  css  js  c++  java
  • [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;
        }
    };
  • 相关阅读:
    iOS开篇——UI之UILabel
    关于Block初识与自己的认识
    浅拷贝与深拷贝
    关于MacBook Pro选购
    准备考试 暂时停更
    Objective-C代理
    Objective-C协议初识
    Objective-C内存管理
    通讯录习题
    软件工程第二次作业 词频统计
  • 原文地址:https://www.cnblogs.com/x1957/p/4177970.html
Copyright © 2011-2022 走看看