news 2026/4/18 6:24:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

我的知乎专栏

我的头条号

我的牛客网博客

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/6 2:42:11

论文写作新纪元:书匠策AI如何成为本科生的“学术变形金刚”

在学术江湖里&#xff0c;本科论文写作常被视为“新手村的第一场BOSS战”——选题撞车、文献迷航、逻辑混乱、语言生硬……这些问题像无形的绳索&#xff0c;将无数初学者困在原地。但别慌&#xff01;今天我们要揭秘一位“学术变形金刚”——书匠策AI&#xff08;官网&#xf…

作者头像 李华
网站建设 2026/4/15 7:40:30

学术“变形记”:书匠策AI如何让本科论文写作从“青铜”变“王者”

对于本科生而言&#xff0c;论文写作常被视为学术生涯的“第一场硬仗”——选题撞车、文献迷航、逻辑混乱、语言生硬……这些问题像无形的枷锁&#xff0c;将无数初学者困在“学术新手村”。但如今&#xff0c;一款名为书匠策AI的智能工具正以“学术变形金刚”的姿态&#xff0…

作者头像 李华
网站建设 2026/4/18 8:08:04

【2026最新 架构环境安装篇一】云服务器Linux安装docker详细教程

#更新最新系统 yum update -y#安装所需的软件包以允许yum使用HTTPS存储库 sudo yum install -y yum-utils device-mapper-persistent-data lvm2#使用docker官方GPG密钥 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#…

作者头像 李华
网站建设 2026/3/31 17:42:06

范式革命——从关键词到对话理解的演进

引言&#xff1a;搜索技术的世纪转折点在信息技术发展史上&#xff0c;2022年无疑是具有里程碑意义的一年。随着ChatGPT的横空出世和生成式AI的爆发式增长&#xff0c;搜索引擎——这个陪伴我们近三十年的互联网核心工具&#xff0c;正经历着自诞生以来最深刻的范式变革。我们正…

作者头像 李华
网站建设 2026/4/4 8:59:18

【跟随主线】低频量化周报(指数风险溢价比,配债完整数据集,可转债策略,上市公司礼品,交易总结)

低频量化周报&#xff08;2026-01-16&#xff09;指数风险溢价比小规模配债<5亿配债完整数据5 批文通过4 发哥通过3 交易所受理2 股东大会通过1 董事会预案可转债策略双低策略低溢价策略小盘低价格策略小盘低溢价策略溢价偏离策略上市公司实物礼品历史操作记录本周心得最后指…

作者头像 李华
网站建设 2026/4/16 14:10:09

2026年智慧校园专项资金申报政策解析:重点支持哪些方向?

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华