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

Leetcode 剑指 Offer II 158. 库存管理 II

题目难度: 简单

原题链接

今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号算法精选里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。

示例 1:

  • 输入:stock = [6, 1, 3, 1, 1, 1]
  • 输出:1

提示:

  • 1 <= stock.length <= 50000
  • 给定数组为非空数组,且存在结果数字

题目思考

  1. 如何不使用额外空间?
  2. 如果题目不保证一定存在多数元素又该怎么办?

解决方案

思路
  • 一个最简单的思路是用一个计数字典存每个数字的出现次数, 找最大的那个即可, 但这需要额外的空间, 不是面试官心目中的理想答案
  • 重新分析题目, 某个数字出现超过一半, 那意味着其他数字的数目之和都小于它, 如果我们将这些不同数字进行两两抵消, 那么最后剩余的那个数字一定是超过一半的那个数字, 这就引出了下面的思路:
    1. 维护一个当前候选者, 以及当前它的计数, 初始化就是数组头一个数字, 计数为 1
    2. 从第二个数字开始遍历数组, 如果当前数字等于候选者, 那么计数值加 1, 否则就减 1 表示抵消了一个数字
    3. 如果此时计数小于 0 的话, 就说明之前的候选者这个时候要被淘汰了, 因为它已经被抵消光了. 所以就重新选择当前的数字作为新的候选者, 同时重置计数值为 1.
    4. 这样最后剩余的那个候选者一定是最终结果, 因为此题的前提是一定存在这样的数字
  • 当然, 如果题目不保证一定存在多数元素, 那么我们在得到最终候选者之后, 需要重新遍历一遍数组并累加其计数, 确保其计数超过一半, 不然的话就说明整个数组没有多数元素. 例如数组[1,2,3], 利用此方法得到的最终候选者为 3, 但它并不是多数元素, 只是恰好最后一个被选出来的候选者而已.
复杂度
  • 时间复杂度O(N)
    • 只需要遍历数组一遍
  • 空间复杂度O(1)
    • 只使用了几个变量
代码
classSolution:definventoryManagement(self,stock:List[int])->int:# 初始化候选者和计数res=stock[0]cnt=1forxinstock[1:]:ifx==res:# 当前元素等于候选者, 计数值+1cnt+=1else:# 否则计数值-1cnt-=1ifcnt<0:# 如果计数值小于0的话, 就说明之前保存的候选者现在被淘汰了, 将当前元素变为新的候选者, 并重置计数值为1res=x cnt=1returnres

大家可以在下面这些地方找到我~😊

我的 GitHub

我的 Leetcode

我的 CSDN

我的知乎专栏

我的头条号

我的牛客网博客

我的公众号: 算法精选, 欢迎大家扫码关注~😊

http://www.jsqmd.com/news/258184/

相关文章:

  • 2026年承德服务不错的西点学校,唐山欧米奇就业渠道广 - 工业品牌热点
  • 学术“变形记”:用书匠策AI把本科论文从“青铜”炼成“王者”
  • 2025年市面上口碑好的智能门窗厂家选哪家,全屋门窗/家居装修/环保门窗/豪宅设计/法式门窗企业找哪家 - 品牌推荐师
  • 本科论文“开挂指南”:用书匠策AI解锁学术新次元
  • 短视频软件代码,改进for循环时间复杂度的一种办法
  • 在强干扰战场中构筑不败链路:光特通信光纤无人机模块技术解析
  • 直播短视频系统,如何实现滚动条样式?
  • 短视频开源源码,js函数柯里化
  • 论文写作“超能力”觉醒:书匠策AI如何让本科生变身学术“超级英雄”
  • 学术新次元:书匠策AI如何重构本科论文写作的“底层逻辑”
  • 【2026最新 架构环境安装篇一】云服务器Linux安装docker详细教程
  • 范式革命——从关键词到对话理解的演进
  • 2024必备10个降AI率工具,本科生速看!
  • 暗流涌动——AI搜索的社会影响与伦理深水区
  • 不思量,自难忘 ! 缅怀攵亲仙逝三周年。
  • 【跟随主线】低频量化周报(指数风险溢价比,配债完整数据集,可转债策略,上市公司礼品,交易总结)
  • 【云计算】云平台权限治理(五):VDC 的树形管理结构 - 详解
  • WorldModel_Theory_002_PPT
  • 计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档) - 教程
  • 2026年国内可靠的低烟无卤电力电缆制造企业电话,ZC-YJLV22低压电力电缆,低烟无卤电力电缆生产厂家推荐榜 - 品牌推荐师
  • 2025年市场有名的艺术漆产品推荐,艺术涂料/诺兰迪/诺兰迪艺术漆/环保艺术涂料/艺术漆/家装艺术漆,艺术漆公司排行 - 品牌推荐师
  • ALLEGRO怎么来回切换shape的圆角跟直角
  • 必看!2026年高品质卷帘门厂家推荐榜单,为您提供安全、耐用的卷帘门解决方案 - 睿易优选
  • 必看!2026年靠谱的防火玻璃门生产厂家推荐,为您的选购提供有效参考 - 睿易优选
  • 2025年上海国货美妆视频制作公司推荐排行,广州视频制作精选实力品牌 - 品牌推荐师
  • 粉尘浓度检测仪供货商怎么选,靠谱的厂家在这里! - 工业品牌热点
  • 用机器学习开展因果推断研究,核心思路其实很简单
  • C++ 学习笔记 58 C++11 nullptr 和 nullptr_t
  • sqlmap一把梭
  • 这 10 个 Vue3 性能优化技巧很实用,但很多项目都没用上