leetcode-H-Index-274

输入一个数组,a[i]代表第i个篇论文有a[i]个引用,求n篇论文中引用数大于等于论文数的论文个数,即设当前有x篇论文满足要求,a[i]满足要求的条件是:a[i]>=x+1

递减排序,遍历一遍,当a[i]>=i+1时ans++,否则break,因为a[i]都不满足a[i]>=i+1,再往后遍历,a[i+1]<=a[i],且i+2>i+1,更不可能满足

这里我发现点问题:

1.起先我用得cmp(int x,int y){return x>=y;}来自定义排序规则,

出现变异错误:invalid use of non-static member function
原来是类的非静态函数是动态的,在编译时不能确定函数地址,所以在sort(a.begin(),a.end(),cmp)里只接用cmp是找不到函数的。改成静态的就行了,具体看代码注释

2.sort(a.begin(),a.end(),cmp)也有问题,RE了,打印出a来看,确实里面的元素有些被改变了如124442这种。去掉cmp之后发现又能正确的排序

怎么都想不通,以前就是这么用的没有出过错,不过以前是用于数组,这次是用于vector,肯定是vector的特性造成的,既然是RE,多半是容器容量或者迭代器问题

  1)尝试把vector容量设大一个,正常了

  2)根据1)判断可能是end()不能正确找到最后一个元素的后一个位置,所以sort(a.rbegin(),a.rend()),也能正常运行

 1 class Solution {
 2 public:
 3     // static bool cmp(int x,int y){
 4     //     return x>=y;
 5     // }
 6     int hIndex(vector<int>& citations) {
 7         int len=citations.size();
 8         if(len==0) return 0;
 9         //sort(citations.begin(),citations.end(),cmp);
10         sort(citations.rbegin(),citations.rend());
11         int ans=0;
12         for(int i=0;i<len;i++){
13             if(citations[i]>=i+1) ans++;
14             else break;
15         }
16         return ans;
17     }
18 };

 

posted @ 2016-09-02 11:54  0_summer  阅读(189)  评论(0编辑  收藏  举报