计算h值,比较容易想到的方法是将输入数组排序,从大到小与坐标比较...代价是O(nlgn)的....
还可以牺牲O(n)的空间来使时间复杂度降低到O(n)...具体做法就是维护一个n+1的数组tmp记录citations中各个数出现的个数(当citations[i]>=len时,tmp[len]++)
之后再从大到小遍历tmp,累加tmp[i]作为count,当第一个出现count>=坐标i的事后即可返回...
public class Solution {
public int hIndex(int[] citations) {
int len = citations.length;
if( len==0 )
{
return 0;
}
int[] tmp = new int[len+1];
for( int i=0;i<len;i++ )
{
if(citations[i]>=len)
{
tmp[len]++;
}
else
{
tmp[citations[i]]++;
}
}
int count=0;
for( int i=len;i>=0;i-- )
{
count+=tmp[i];
if( count>=i)
{
return i;
}
}
return 0;
}
}