【LeetCode从零单刷】H-index I & II
来源:互联网 发布:软件天空破解版 编辑:程序博客网 时间:2024/05/22 04:30
题目:
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 thanh 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.
解答:
一开始做的非常麻烦,遍历引用数(并没连续分布,有间隔值),因此还要计算 maximum、维护与 size 的关系。
遍历应针对连续值(此题中的 size 值是连续分布的)。其实看维基可以清楚知道算法:h-index (f) =
class Solution {public: int hIndex(vector<int>& citations) { int size = citations.size(); if (size == 0) return 0; sort(citations.begin(), citations.end(), [](int a, int b){return a>b;}); vector<int> tmp; for(int i = 0; i< size; i++) { tmp.push_back(citations[i]>(i+1)?(i+1):citations[i]); } sort(tmp.begin(), tmp.end(), [](int a, int b){return a>b;}); return tmp[0]; }};
Follow up for H-Index: What if the citations
array is sorted in ascending order? Could you optimize your algorithm?
Hint:
- Expected runtime complexity is in O(log n) and the input is sorted.
看到 O(log n)应该自动想到二分搜索。而且这里是已经排好序的 citations 数组。注意处理数组为0,以及数组最大值小于等于0的情况。
class Solution {public: int hIndex(vector<int>& citations) { int size = citations.size(); if(size == 0 || citations[size - 1] <= 0) return 0; int left = 0; int right = size - 1; int mid; while(left < right) { mid = (left + right) / 2; if (citations[mid] < size - mid) left = mid + 1; else right = mid; } return (size - right); }};
- 【LeetCode从零单刷】H-index I & II
- LeetCode-H-Index I & II
- leetcode H-Index (I、II)
- [leetcode 274 275]H-Index I II
- [leetcode] 274 275 H-Index I && II
- Leetcode: H-Index II
- Leetcode: H-Index II
- [LeetCode]H-Index II
- H-Index II -- leetcode
- LeetCode H-Index II
- leetcode H-Index II
- [Leetcode]H-Index II
- [LeetCode] H-Index II
- LeetCode -- H-Index II
- [LeetCode]H-Index II
- LeetCode:H-Index II
- 【Leetcode】H-Index II
- Leetcode H-Index II
- ThinkPHP中数据库CRUD操作方法盘点(field方法)
- java学习:创建鼠标监听事件
- java线程中异常的处理 -Java 7 Concurrency Cookbook 读书笔记
- 杭电2602---01背包
- Linux 用户身份切换
- 【LeetCode从零单刷】H-index I & II
- InvocationTargetException异常
- 从零开始学【树】
- 原码、反码、补码之加减运算
- hdu 5510 Bazinga 2015ACM/ICPC亚洲区沈阳站现场赛
- Memcached介绍
- 03-32位UUID和封装Map对象到指定类型的Bean中
- 运行示例sparkPi计算圆周率(1.1)
- 《TCP/IP详解 卷1:协议》读书笔记 第一章