1 class Solution { 2 public: 3 int hIndex(vector & citations) { 4 sort(citations.begin(), citations.end()); 5 for(int i = 0; i < citations.size(); ++i){ 6 if(citations[i] >= citations.size() - i) 7 return citations.size() - i; 8 } 9 10 }11 };
N个数中有h个数>=于h,其余的<h。
在纸上写出后便易得,当N个数排序后,在citation[i]的右边(包括它本身),共有N-i个数,这些数均>=citation[i],即有N-i个数>=citation[i],使h=N-i,如果此时citation[i]>=N-i,那么必定有N-i个数>=N-i,此时N-i就是要求的h。因为h取最大值,所以i从0开始。
追加:
发现一个漏洞,当输入[0]时,照理来说是没法return的,但是不知为何LeetCode替我return了0……
正确代码:
1 class Solution { 2 public: 3 int hIndex(vector & citations) { 4 sort(citations.begin(), citations.end()); 5 for(int i = 0; i < citations.size(); ++i){ 6 if(citations[i] >= citations.size() - i) 7 return citations.size() - i; 8 } 9 return 0;10 11 }12 };