题型:数组、计数、排序、STL函数、查找众数
链接:169. 多数元素 - 力扣(LeetCode)
来源:LeetCode 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目描述
给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
题目样例
示例 1:
输入:nums = [3,2,3] 输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
题目思路
2024.3.1(这个更新一点)
绝了,话不多说 !
说干就干!(毕竟我都排完序了。。)
2024.3.1
思路还是很好想的:先排好序,然后统计边遍历边统计这个元素的个数(当然后面指针要后移相应的个数的位置)。
这里笔者试着用了刚学的STL中的一众函数(比如sort()、cout()),其中count(迭代器、迭代器、要查找的数)。因此如果想从第i个元素开始计数,参数那里应该是【迭代器+i】;最终返回的值可以直接被int接收(当然最稳妥的方法是先转为int再接收)
C++代码
class Solution {
public:
int majorityElement(vector<int>& nums) {
int i=0,len=nums.size(),target;//target是要查个数的元素
sort(nums.begin(),nums.end());//按从小到大顺序排序
while(i<len)
{
target=nums[i];
int lamb=count(nums.begin()+i,nums.end(),target);//统计出现的个数 参数前两个应该是迭代器。
//int lamb=(int)numb;
cout<<lamb<<endl;
if(lamb>(len/2))
{
break;
}
i+=lamb;
}
return nums[i];
}
};
只排序的代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int i=0,len=nums.size(),target;//target是要查个数的元素
sort(nums.begin(),nums.end());//按从小到大顺序排序
// while(i<len)
// {
// target=nums[i];
// int lamb=count(nums.begin()+i,nums.end(),target);//统计出现的个数 参数前两个应该是迭代器。
// //int lamb=(int)numb;
// cout<<lamb<<endl;
// if(lamb>(len/2))
// {
// break;
// }
// i+=lamb;
// }
return nums[len/2];
}
};
真少啊!
结算页面
使用了STL中的函数后还是不太行...
看了题解后
sort()占了时间大头(虽然是个nlogn的时间复杂度吧)