zoukankan      html  css  js  c++  java
  • [LeetCode]59. H-Index H指数

    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 other N − 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 3 citations each, his h-index is 3.

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

    Show Hint 

      Credits:
      Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

      Subscribe to see which companies asked this question

       
      解法1:对输入数组按引用次数从高到低排序,然后扫描一遍数组,找到第一篇“被引用次数小于它在数组中出现的序号”的论文,其序号即是H-Index。
      class Solution {
      public:
          int hIndex(vector<int>& citations) {
              int n = citations.size();
              sort(citations.begin(), citations.end(), greater<int>());
              for(int i = 0; i < n; ++i) {
                  if(citations[i] <= i)
                      return i;
              }
              return n;
          }
      };
      解法2:设计Map<int,int>,保存下某个引用次数和论文篇数的映射。扫描一遍数组,若当前论文引用次数为x,则将[0,x]间所有的引用次数的论文篇数加1。然后再扫描一遍Map,找出论文篇数超过这个引用次数的引用次数,即是H-Index。
      class Solution {
      public:
          int hIndex(vector<int>& citations) {
              int n = citations.size();
              map<int, int> index;
              for (int i = 0; i < n; ++i) {
                  int idx = citations[i];
                  for (int j = 0; j <= idx; ++j)
                      ++index[j];
              }
              int hIndex = 0;
              for (map<int, int>::iterator iter = index.begin(); iter != index.end(); ++iter) {
                  if (iter->second >= iter->first)
                      hIndex = max(hIndex, iter->first);
              }
              return hIndex;
          }
      };
    1. 相关阅读:
      6. Flask请求和响应
      5. Flask模板
      FW:Software Testing
      What is the difference between modified duration, effective duration and duration?
      How to push master to QA branch in GIT
      FTPS Firewall
      Query performance optimization of Vertica
      (Forward)5 Public Speaking Tips That'll Prepare You for Any Interview
      (转)The remote certificate is invalid according to the validation procedure
      Change
    2. 原文地址:https://www.cnblogs.com/aprilcheny/p/4942753.html
    Copyright © 2011-2022 走看看