首页 > 代码库 > 未分类随笔

未分类随笔

H-Index 

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

这个题还是有些绕的,主要是题意搞得有点晕了。最后题意应该是:h 为 h篇文章的引用至少为h,其余N-h篇文章的引用至多为h。(另外一种错误的理解是引用大于h的至少h篇)

方法一:hashtable

新建一个数组来存储每个引用分别有多少篇文章,由于h最多为文章总数len,所以对于那些引用大于文章总数len的,就把这些文章也加载引用为len次的元素位置。然后从这个数组末尾开始遍历。

使用一个tmp来存储文章数目,遍历到cur,首先更新tmp,表示引用大于等于cur的文章共有tmp篇。如果tmp>=cur,则可以返回cur.

技术分享
 1 class Solution(object): 2     def hIndex(self, citations): 3         """ 4         :type citations: List[int] 5         :rtype: int 6         """ 7         if not citations: 8             return 0 9         length = len(citations)10         articleNum = [0]*(length + 1)11         for i in range(length):12             if citations[i] >= length:13                 articleNum[length] += 114             else:15                 articleNum[citations[i]] += 116         tmp = 017         for i in range(length, -1, -1):18             tmp += articleNum[i]19             if tmp >= i:20                 return i21         return 0
View Code

方法二:sort

首先对数组排序,引用次数越多的排在越后边,然后从后边开始遍历。使用tmp表示文章数量,遍历时,如果tmp<citation[i],tmp++,如果tmp==citation[i]表示有m篇引用至少为tmp,返回tmp即可,如果tmp>citations,[0 1 1 5 6 ]返回tmp-1,因为当前位置不行,下一位置可以。

技术分享
 1 class Solution(object): 2     def hIndex(self, citations): 3         """ 4         :type citations: List[int] 5         :rtype: int 6         """ 7         citations.sort() 8         length = len(citations) 9         tmp = 110         for i in range(length - 1, -1, -1):11             if tmp > citations[i]:12                 return tmp - 113             elif citations[i] == tmp:14                 return tmp15             else:16                 tmp += 117         return length18         
View Code

 

未分类随笔