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

数据结构学习 jz39 数组中出现次数超过一半的数字

关键词:排序 摩尔投票法

摩尔投票法没学过所以没有想到,其他的都自己想。

题目:库存管理 II

方法一:

思路:

排序然后取中间值。因为超过一半所以必定在中间值是我们要的结果。

复杂度计算:

时间复杂度O(nlogn)

空间复杂度O(1)

代码:

class Solution {
public:int inventoryManagement(vector<int>& stock) {if(stock.size()==1) return stock[0];sort(stock.begin(),stock.end());return stock[stock.size()/2];}
};

方法二:

哈希表统计法。

思路:

哈希表统计一遍,如果结果大于一半就返回。

复杂度计算:

时间复杂度O(n)

空间复杂度O(k)数的总类

代码:

class Solution {
public:int inventoryManagement(vector<int>& stock) {if(stock.size()==1) return stock[0];unordered_map<int,int> hash;for(int i=0;i<stock.size();++i){hash[stock[i]]++;if(hash[stock[i]]>stock.size()/2) return stock[i];}return 0;}
};

方法三:最佳解法

 摩尔投票法。

思路:

我是看了k神的题解才会的。建议看。

复杂度计算:

时间复杂度O(n)

空间复杂度O(1)

代码:

class Solution {
public:int inventoryManagement(vector<int>& stock) {int x=0;int votes=0;for(const int&num:stock){if(votes==0) x=num;if(num==x) votes+=1;//和假设的众数x一样,就+1else votes+=-1;//不一样就-1}return x;}
};
http://www.lryc.cn/news/281207.html

相关文章:

  • 基于Linux的Flappy bird游戏开发
  • 排序算法6---快速排序(非递归)(C)
  • 【Verilog】期末复习——设计带异步清零且高电平有效的4位循环移位寄存器
  • 银行网络安全实战对抗体系建设实践
  • SwiftUI之深入解析Alignment Guides的超实用实战教程
  • java获取视频文件的编解码器
  • 动态规划Day06(完全背包)
  • selenium之框架之窗口
  • 华为OD机试 - 最小矩阵宽度(Java JS Python C)
  • 嵌入式linux_C应用学习之API函数
  • 【ubuntu】docker中如何ping其他ip或外网
  • 【Vue3+Ts项目】硅谷甄选 — 品牌管理+平台属性管理+SPU管理+SKU管理
  • 计算机图形学流体模拟 blender 渲染脚本
  • 二分图带权最大匹配-KM算法详解
  • Redis命令 - Sets命令组常用命令
  • DA14531-外设驱动篇-I2C通信应用
  • Git仓库管理笔记
  • [嵌入式软件][入门篇] 搭建在线仿真平台(STM32)
  • 设置5台SSH互免的虚拟机服务器配置
  • 深信服技术认证“SCCA-C”划重点:交付和运维体系
  • xlua源码分析(五) struct类型优化
  • iptables TEE模块测试小记
  • [IDE]vscode显示文件路径
  • facebook广告怎么设置受众人群
  • MySQL夯实之路-MVCC机制深入浅出
  • Java线上问题堆栈排查分析
  • C语言代码 计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!
  • 【RTOS】快速体验FreeRTOS所有常用API(4)队列
  • 【开题报告】基于SpringBoot的美食制作学习网站的设计设计与实现
  • Rosalind Java|Speeding Up Motif Finding