275. H 指数 II
题目描述:
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。
h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数 不超过 h 次。
提示:如果 h 有多种可能的值,h 指数 是其中最大的那个。
请你设计并实现对数时间复杂度的算法解决此问题。数组已经按升序排列
考察重点:274题中,按照顺序查找符合元素。本题要求对数时间复杂度解决,即需要二分法进行查找。即我们使用二分法查找数组,当citations[i] >= len(citations)-i时,说明其为h指数。
func HIndex2(citations []int) int {mlen, res := len(citations), 0if (mlen == 1 && citations[0] == 0) || (citations[mlen-1] == 0) { //排出[0]和[0,0,0]情况return 0}for left, right := 0, mlen-1; left <= right; {mid := left+(right-left)/2oth := mlen - midif oth <= citations[mid] { //找到满足条件的了,应该往左侧继续寻找,因为 4,4,6,6,8,9,10 这种搜到6后,他左侧的6,oth更大,达到5res = othright = mid - 1} else {left = mid + 1}}return res
}