- 问题1:第一段代码会出现数组越界问题;第二段代码能通过。刚开始以为是sort函数Strict Weak Ordering 问题,后来发现是
出现了问题,可能 这里确实写得不好。major = nums[(nums.size()+1)/2]
- 问题2 :reference to non-static member function must be called: sort(nums.begin(), nums.end(),comp);错误
class Solution {
public:
static bool comp(int d1, int d2)
{
return d1<d2;
}
int majorityElement(vector<int>& nums) {
int major;
int count = 0;
if(nums.size() > 0)
{
std::sort(nums.begin(), nums.end(),comp);
major = nums[(nums.size()+1)/2];
for(int i = 0; i < nums.size(); i++)
{
if(nums[i] == major)
count++;
}
return count>nums.size()/2?major:-1;
}
return -1;
}
};
class Solution {
public:
static bool comp(int d1, int d2)
{
return d1>d2;
}
int majorityElement(vector<int>& nums) {
int major;
int count = 0;
if(nums.size() > 0)
{
std::sort(nums.begin(), nums.end());
major = nums[nums.size()/2];
for(int i = 0; i < nums.size(); i++)
{
if(nums[i] == major)
count++;
}
return count>nums.size()/2?major:-1;
}
return -1;
}
};
- 参考文档:
- 问题1:sort函数详解
- 问题2:comp的要求;函数指针
- 类内的非静态成员函数指针和普通函数指针是有区别的,具体区别在类内的非静态成员函数参数列表中含有隐式的this指针,针对类的每个具体对象。而静态成员函数则没有,和普通函数指针一致。
- 解决方法:①comp函数加static,变为类内的静态成员函数;②comp函数放在类外,当做全局普通函数。