zoukankan      html  css  js  c++  java
  • leetcode@ [274/275] H-Index & H-Index II (Binary Search & Array)

    https://leetcode.com/problems/h-index/

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index.

    According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the otherN − h papers have no more than h citations each."

    For example, given citations = [3, 0, 6, 1, 5], which means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively. Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3citations each, his h-index is 3.

    Note: If there are several possible values for h, the maximum one is taken as the h-index.

    Hint:

    1. An easy approach is to sort the array first.
    2. What are the possible values of h-index?
    3. A faster approach is to use extra space.
    class Solution {
    public:
        int getIdx(vector<int>& vec, int val) {
            if(vec.size() <= 0) return -1;
            int low = 0, high = vec.size()-1;
            while(low < high) {
                int mid = low + (high-low)/2;
                if(vec[mid] < val) low = mid+1;
                else high = mid;
            }
            return low;
        }
        int hIndex(vector<int>& citations) {
            if(citations.size() == 0) return 0;
            if(citations.size() == 1) {
                if(citations[0] == 0) return 0;
                return 1;
            }
            sort(citations.begin(), citations.end());
            if(citations[citations.size()-1] == 0) return 0;
            
            int res = INT_MIN;
            int low = 0, high = citations.size();
            while(low < high) {
                int mid = low + (high - low)/2;
                if(mid <= citations.size()-getIdx(citations, mid)) {
                    low = mid;
                    res = max(res, mid);
                }
                else high = mid;
                if(high - low <= 1) break;
            }
            
            if(low <= citations.size()-getIdx(citations, low)) {
                res = max(res, low);
            }
            if(high <= citations.size()-getIdx(citations, high)) {
                res = max(res, high);
            }
            return res;
        }
    };
    leetcode 263: H-Index
    class Solution {
    public:
        int getIdx(vector<int>& vec, int val) {
            if(vec.size() <= 0) return -1;
            int low = 0, high = vec.size()-1;
            while(low < high) {
                int mid = low + (high-low)/2;
                if(vec[mid] < val) low = mid+1;
                else high = mid;
            }
            return low;
        }
        int hIndex(vector<int>& citations) {
            if(citations.size() == 0) return 0;
            if(citations.size() == 1) {
                if(citations[0] == 0) return 0;
                return 1;
            }
            //sort(citations.begin(), citations.end());
            if(citations[citations.size()-1] == 0) return 0;
            
            int res = INT_MIN;
            int low = 0, high = citations.size();
            while(low < high) {
                int mid = low + (high - low)/2;
                if(mid <= citations.size()-getIdx(citations, mid)) {
                    low = mid;
                    res = max(res, mid);
                }
                else high = mid;
                if(high - low <= 1) break;
            }
            
            if(low <= citations.size()-getIdx(citations, low)) {
                res = max(res, low);
            }
            if(high <= citations.size()-getIdx(citations, high)) {
                res = max(res, high);
            }
            return res;        
        }
    };
    leetcode 264: H-Index II
  • 相关阅读:
    子网划分详解
    USACO range
    USACO shopping
    USACO fence
    USACO Spinning Wheels
    USACO butter
    USACO msquare
    USACO Feed Ratios
    USACO Stringsobits
    USACO Factorials
  • 原文地址:https://www.cnblogs.com/fu11211129/p/5012971.html
Copyright © 2011-2022 走看看