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

算法面试题:多数元素

leetcode 面试题目:

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。

方案一:map 统计查询

  /**
     * map 统计查询
     * 执行用时 : 22 ms
     * 内存消耗 :47.3 MB
     * @param nums
     * @return
     */
    public static int majorityElement(int[] nums) {

        int ret = -1;
        if(nums.length <= 2){
            return nums[0];
        }
        int count = nums.length/2;
        Map<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < nums.length; i++){
            if (!map.containsKey(nums[i])){
                map.put(nums[i],1);
            }else{
                map.put(nums[i],map.get(nums[i])+1);
            }
        }

        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            int mapKey = entry.getKey();
            int mapValue = entry.getValue();
            if (mapValue> count){
                ret = mapKey;
                break;
            }
        }

        return ret;
    }

方案二 单次循环计数

   /**
     * 单次循环 计数
     * 执行用时 :2 ms
     * 内存消耗 :41.6 MB
     * @param nums
     * @return
     */
    public static int majorityElement2(int[] nums) {

        int ret = nums[0];
        int cnt = 1;
        for (int i = 1; i < nums.length; i++) {
            if (ret == nums[i]) {
                cnt++;
            } else {
                cnt--;
                if (0 == cnt) {
                    ret = nums[i];
                    cnt = 1;
                }
            }
        }

        return ret;
    }

方案三 使用自带的排序

    /**
     * 使用自带的排序
     * 执行用时 :2 ms
     * 内存消耗 :42.2 MB
     * @param nums
     * @return
     */
    public static int majorityElement3(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length/2];
    }

相关文章:

  • 《改变你一生的108个心理学法则》读书笔记
  • linux 安装jdk1.8并配置环境变量(超简单方便)
  • idea project设置jdk
  • 帝国后台修改密码
  • 算法面试题:数组中重复的数字
  • python输出shell命令执行结果
  • 算法面试题:字符串转换整数 (atoi)
  • 电话的前世今生
  • abstract 和Interface的共同点和区别以及应用场景
  • 算法面试题:最长回文子串
  • SpringMVC AJAX向后台传递数组参数/实体集合
  • 算法面试题:无重复字符的最长子串
  • 盒子模型高级应用
  • WRONGTYPE Operation against a key holding the wrong kind of value
  • TunnelBroker for EdgeRouter 后记
  • CentOS从零开始部署Nodejs项目
  • Javascript弹出层-初探
  • Java面向对象及其三大特征
  • Mac转Windows的拯救指南
  • mongo索引构建
  • MYSQL 的 IF 函数
  • node 版本过低
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python socket服务器端、客户端传送信息
  • python学习笔记-类对象的信息
  • SpringBoot几种定时任务的实现方式
  • spring学习第二天
  • SSH 免密登录
  • 离散点最小(凸)包围边界查找
  • 区块链分支循环
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 小试R空间处理新库sf
  • 一个JAVA程序员成长之路分享
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • #Java第九次作业--输入输出流和文件操作
  • #Ubuntu(修改root信息)
  • (9)目标检测_SSD的原理
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (js)循环条件满足时终止循环
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (差分)胡桃爱原石
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • ****Linux下Mysql的安装和配置
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .bat批处理(一):@echo off
  • .NET Reactor简单使用教程
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net2005怎么读string形的xml,不是xml文件。
  • .pop ----remove 删除
  • [ Algorithm ] N次方算法 N Square 动态规划解决