文章目錄
- 1.題目
- 2.法一:用sort
- 3.法二:摩爾投票法(Boyer-Moore)
1.題目
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yMyUDN2UGMhJWO1MTY3Y2YyYzX1QjNwATM0EzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
2.法一:用sort
先用sort排序後,因為定義的“多數元素”是在數組中出現次數大于n/2的元素,是以可以傳回下标為n/2的數組元素即所求。
用sort的時間複雜度就是O(nlogn)而非O(n)了。
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
3.法二:摩爾投票法(Boyer-Moore)
class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate=nums[0];
int count=1;
for(int i=1;i<nums.size();i++){
if(candidate==nums[i]){
count++;//遇到相同的則票數+1
}else{
//遇到不同
if(--count==0){//票數為0則替換候選人
candidate=nums[i];
count=1;//重置1
}
}
}
return candidate;
}
};