• 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
  • 相关阅读:
    Java HashMap HashCode
    JS 笔记---持续更新
    彻底弄懂 JavaScript 执行机制
    几条jQuery代码片段助力Web开发效率提升
    原生JS与jQuery操作DOM对比
    jQuery->JavaScript一览表
    Jquery介绍
    canvas雪花
    canvas绘制多边形
    兼容性的事件处理程序
  • 原文地址:https://www.cnblogs.com/fu11211129/p/5012971.html
Copyright © 2020-2023  润新知