当前位置: 首页 > news >正文

leetcode 169.Majority Element

这道题虽然简单,但适合用来练习各种解法。《剑指offer》5.2节 面试题29与此题一样,并且给出了leetcode官方题解未给出的快速选择的解法。

用哈希表解决

class Solution {
public:int majorityElement(vector<int>& nums) {unordered_map<int,int> count;int majority = 0;int cnt = 0;for(auto num:nums){count[num]++;if(count[num] > cnt){cnt = count[num];majority = num;}}return majority;}
};

先排序再取nums[n/2]

class Solution {
public:int majorityElement(vector<int>& nums) {int len = nums.size();srand(time(0));quick_sort(nums,0,len-1);return nums[len/2];}int partition(vector<int>& nums,int left,int right){if(left >= right)return left;int random = rand()%(right - left +1);swap(nums[left],nums[left + random]);int pivot = nums[left];while(left < right){while(left<right && pivot < nums[right]) right--;nums[left] = nums[right];  while(left<right && nums[left]<=pivot) left++;nums[right] = nums[left];}nums[left] = pivot;return left;}void quick_sort(vector<int>& nums,int left,int right){if(left>=right) return;int pivot_pos = partition(nums,left,right);quick_sort(nums,left,pivot_pos-1);quick_sort(nums,pivot_pos+1,right);}
};

随机化方法

class Solution {
public:int majorityElement(vector<int>& nums) {srand(0);int len = nums.size();int random = 0; int cnt = 0;while(true){random = rand()%len;cnt = 0;for(auto num:nums){if(num == nums[random]){cnt++;if(cnt >len/2)return num;}}}}
};

Boyer-Moore投票法

《剑指offer》5.2节也给出了这种解法

class Solution {
public:int majorityElement(vector<int>& nums) {int candidate = nums[0];int count = 1;for(int i = 1;i < nums.size();i++){if(nums[i] == candidate){count++;}else{count--;if(count == 0){candidate = nums[i];count = 1;}}}return candidate;}
};


http://www.mrgr.cn/news/96606.html

相关文章:

  • Vue3中的Icon处理方案(包括将svg转化为Icon)
  • 一个极简的词法分析器实现
  • Java-01-源码篇-JUC并发编程-原子类
  • 供应链业务-供应链全局观(一)
  • 数据库--数据库设计
  • OpenHarmony v4.1 Release设置应用随系统自动启动
  • 23 python 数据容器推导式
  • 【学Rust写CAD】21 2D 点(point.rs)
  • Verilog HDL 100道面试题及参考答案
  • [7-02-02].第03节:生产经验 - Broker节点服役和退役
  • Nyquist插件基础:打印格式化字符串(LISP语言)
  • python代码实现离散haar小波变换和db4小波变换
  • kubernetes》》k8s》》 kubeadm、kubectl、kubelet 重启pod
  • SkyWalking+Springboot实战
  • 2025国内DevOps新手突围指南:从Gitee零门槛入门到工具链深度对比
  • 虫洞数观系列二 | Python+MySQL高效封装:为pandas数据分析铺路
  • 分布式计算Ray框架面试题及参考答案
  • Mac Apple silicon如何指定运行amd64架构的ubuntu Docker?
  • 一个判断A股交易状态的python脚本
  • USB有驱ID卡读卡器C#小程序开发