news 2026/2/28 22:49:06

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/2/27 15:20:14

WEEX Labs:中文 Meme 热潮真的来了?

2026 年开年以来&#xff0c;尽管加密市场整体仍处震荡整理阶段&#xff0c;但链上热度却已悄然复苏。一众中文 Meme 币不仅带动了不少老牌项目起涨&#xff0c;也凭借名人效应和中文化娱乐梗改写了以往由英文主导的叙事逻辑。本篇短文就为大家分享近期流行的中文 Meme &#x…

作者头像 李华
网站建设 2026/2/27 7:17:09

探索AI原生应用与检索增强生成的发展机遇

探索AI原生应用与检索增强生成的发展机遇关键词&#xff1a;AI原生应用、检索增强生成&#xff08;RAG&#xff09;、大语言模型、知识融合、智能应用创新摘要&#xff1a;当AI从“工具”进化为“核心引擎”&#xff0c;一场应用形态的革命正在发生——这就是“AI原生应用”。而…

作者头像 李华
网站建设 2026/2/25 6:20:48

桌面大爷学Web(2)-AI SOLO模式实战:只动嘴不动手从零构建Vue地图页面

文章目录一、前言二、 项目背景三、交互开发流程第一次任务&#xff1a;项目初始化第二次任务&#xff1a;地图交互功能第三次任务&#xff1a;模式选择与量测功能第四次任务&#xff1a;数据库查询功能第五次任务&#xff1a;地名搜索功能最终任务 应用代码重构和添加注释重构…

作者头像 李华