LeetCode 274/275 H-Index Java
2015-09-11 11:14
543 查看
H-Index I
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.
这道题目,受提示的误导,排序了,AP程序如下:
但是,其实这道题目还有其他解法,用空间换时间,可以用o(n)的时间复杂度解决这个问题。程序如下:
H-Index II
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize your algorithm?
和H-Index I 相比,给定的数组已经排好序了。
所以,直接二分查找即可。
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.
这道题目,受提示的误导,排序了,AP程序如下:
public int hIndex(int[] citations) { Arrays.sort(citations); int rst=0; for (int i = citations.length - 1; i >= 0; i--) { if (citations[i] >= citations.length - i) rst= citations.length - i; } return rst; }
但是,其实这道题目还有其他解法,用空间换时间,可以用o(n)的时间复杂度解决这个问题。程序如下:
public int hIndex(int[] citations) { int len = citations.length; int[] count = new int[len + 1]; for (int c: citations) if (c > len) count[len]++; else count[c]++; int total = 0; for (int i = len; i >= 0; i--) { total += count[i]; if (total >= i) return i; } return 0; }
H-Index II
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize your algorithm?
和H-Index I 相比,给定的数组已经排好序了。
所以,直接二分查找即可。
public class Solution { public int hIndex(int[] citations) { if(citations == null || citations.length == 0) return 0; int l = 0, r = citations.length; int n = citations.length; while(l < r){ int mid = l + (r - l) / 2; if(citations[mid] == n - mid) return n - mid; if(citations[mid] < citations.length - mid) l = mid + 1; else r = mid; } return n - l; } }
相关文章推荐
- 25个Java机器学习的工具与库(英)
- java并发基础
- myeclipse的一些优化设置
- java.lang.String中的trim()方法的详细说明
- java中HashMap详解
- JAVA 使用iText导出PDF(含有Table)示例
- Java中使用JAR文件
- JAVA得到当前系统时间
- getResourceAsStream用法
- spring对session和事务的管理以及OpenSessionInViewFilter是如何工作的
- Eclipse在搜索的时候,遇到Resource is out of sync with the file system的问题
- java实体转map工具类
- javabean实体类对象转为Map类型对象的方法
- java框架spring中的opensessioninview有什么作用
- java调用webservices
- [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
- 【转】Java开源项目源码阅读方法及二次开发方法
- SpringMVC深度探险(一) —— SpringMVC前传
- 简单JavaSE游戏----扫雷
- Java 多线程同步的五种方法