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

Day16:数组中出现次数超过一半的数字

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

示例 1:

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

LCR 158. 库存管理 II - 力扣(LeetCode) 

用一个桶,遍历数组,出现一次就++,大于1/2说明只可能有一个数字,每次++的时候检查一下是否超了,如果超了,直接return就行。

class Solution {
    public int inventoryManagement(int[] stock) {
        HashMap<Integer,Integer> count = new HashMap<>();
        for(int i = 0; i < stock.length; i++){
            count.put(stock[i],count.getOrDefault(stock[i],0) + 1);
        }
        // 找到频率超过一半的元素
        for (int i = 0; i < stock.length; i++) {
            if (count.get(stock[i]) > stock.length / 2) {
                return stock[i];
            }
        }
        return 0;
    }
}

还有一种效率更高的方法:摩尔投票法

class Solution {
    public int inventoryManagement(int[] stock) {
        int x = 0, votes = 0, count = 0;
        for(int num : stock){
            if(votes == 0) x = num;
            votes += num == x ? 1 : -1;
        }
        // 验证 x 是否为众数
        for(int num : stock)
            if(num == x) count++;
        return count > stock.length / 2 ? x : 0; // 当无众数时返回 0
    }
}

相关文章:

  • 凡科建站帮忙做网站免费私人网站建设
  • wordpress管理密码修改网站seo优化免费
  • 唐山市城市建设档案馆网站网站自助建站系统
  • 青海高端网站建设多少钱最大的中文搜索引擎
  • 中山建设网站合肥关键词排名推广
  • 美食论坛网站模板大连seo顾问
  • harmonyOS NEXT开发与前端开发深度对比分析
  • C语言数据类型取值范围及格式化符号
  • NVMe集群:加速数据处理
  • 【C语言】自定义类型:结构体,联合,枚举(下)
  • python函数式编程
  • 【教程】继承中的访问控制 C++
  • C 语 言 --- 三 子 棋
  • 汽车保养记录用什么软件记录,汽车维修记录查询系统,佳易王汽车保养维护服务记录查询管理系统操作教程
  • 【免费】1949-2020年各省人均GDP数据
  • 2019年12月全国POI数据分享(同源历史POI分享系列)
  • Linux 蓝牙音频软件栈实现分析
  • 单引号与双引号在不同编程语言中的使用与支持
  • 【菜鸟飞】在vsCode中安装python的ollama包出错的问题
  • 高频面试题(含笔试高频算法整理)基本总结回顾21
  • C语言【内存函数】详解
  • 对比学习(Contrastive Learning)
  • 浏览器指纹——跨境业务
  • 机器人ROS学习:Ubuntu22.04安装ROS2和Moveit2实现运动规划
  • 【黑马点评|项目】万字总结(上)
  • 将Dify文档中的CSV数据提取并用ECharts可视化工具开发指南