LCR 158. 库存管理 II - 力扣(LeetCode)
仓库管理员以数组 stock
形式记录商品库存表。stock[i]
表示商品 id
,可能存在重复。请返回库存表中数量大于 stock.length / 2
的商品 id
。
(1)方法一:先排序
题目说存在数的出现次数大于一半,所以排完序之后,返回中间位置对应的数就可行了
class Solution {
public:int inventoryManagement(vector<int>& stock) {sort(stock.begin(),stock.end());// 先排序return stock[stock.size() >> 1];}
};
(2)方法二:哈希表
class Solution {
public:int inventoryManagement(vector<int>& stock) {int num = stock.size() >> 1;unordered_map<int,int> mp;for(const int &a:stock) {mp[a]++;if(mp[a]>num) return a;}return -1;}
};
(3)方法三:摩尔投票法
class Solution {
public:int inventoryManagement(vector<int>& stock) {int votes = 0;int x = 0;for(const int &num : stock) {if(votes==0) x=num;// if(x==num) votes++;// else votes--;votes += (x==num)? 1 : -1;}return x;}
};
推荐和参考文章:
LCR 158. 库存管理 II(摩尔投票,清晰图解https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/solutions/138691/mian-shi-ti-39-shu-zu-zhong-chu-xian-ci-shu-chao-3/