2021/7/11 leetcode每日一题,H指数 桶的思想

首先我们来看一下7月11日的H指数

附原题传送门H指数
2021/7/11 leetcode每日一题,H指数 桶的思想_第1张图片
就题目本身而言其实是很简单的,只是对于文字理解上可能对于一部分人来说有困难(lc评论区都是吐槽题目文字的晦涩难懂),题目中的h指数,其实就是指作者文章有h篇文章被至少引用了h次。至少一次也就是一个向下包含的关系。我们首先看一下示例{3,0,6,1,5}数组中的值代表了没票文章被引用的次数。
通过观察我们不难发现有3篇文章的引用次数是大于3的,这句话可以等价于图一leetcode例题解释中的由于研究这有三篇论文每篇至少被引用了3次。解释中后一句的N-h篇论文每篇论文被引用次数不超过h次,也就是说{3,0,6,1,5}数组中去除大于3的N-h篇,也就是5-3=2篇,剩下的两篇{0,1}不大于h次。

接下来废话不多说直接上代码

	//桶的思想和贪心
public int hIndex(int[] citations) {
	//先求出桶的最大容量,也就是文章的最大引用次数
	int max=0;
	for (int i = 0; i < citations.length; i++) {
		if(citations[i]>max) max=citations[i];
	}
	//桶的下标表示被引用的次数,值表示超过被引用次数的次数
	int[] buckets=new int[max+1];
	//循环给桶内元素赋值
	for (int i = 0; i < citations.length; i++) {	
		//由于至少一词是一个向下包含的关系,比如说6包括{5,4,3,2,1},所以说对应的值次数也要统计
		for (int j = citations[i]; j >= 0; j--) {
			buckets[j]++;
		}
	}
	//倒序查找符合题意的h值
	for (int i = buckets.length-1; i >=0 ; i--) {
		//有 h 篇论文分别被引用了至少 h 次
		if(buckets[i]>=i) {
			return i;
		}
	}
	return -1;
}

很多人可能会在[100]、[1,3,1]等类似数据提交不通过,就是没有考虑到一个向下包含的关系。

你可能感兴趣的:(leetcode,算法)