当前位置: 首页 > 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
    }
}

相关文章:

  • 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可视化工具开发指南
  • 航海王亚洲巡展、工厂店直销……上海多区推出“五五购物节”活动
  • 160名老人报旅行团被扔服务区?张家界官方通报
  • 亮剑浦江丨上海网信部门处罚一批医疗服务类互联网企业,三大类问题值得关注
  • 黄永年:说狄仁杰的奏毁淫祠
  • “五一”假期全国口岸日均出入境人员将达215万人次
  • 上海明天起进入“升温通道”,五一假期冲刺33℃