首页 > 代码库 > leetcode-H-Index-274
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 };
leetcode-H-Index-274
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。