• LeetCode(169):多数元素


    题目描述

    image.png

    实现思路

    根据题目的描述,可以理解为:
    在给定的数组中 找出 出现次数最多的一个元素(假定一定有一个这样的元素)
    那么我们可以借助一个哈希表 来存储各个元素出现的次数
    遍历完数组后,再找出哈希表中的value最大值

    代码实现(Javascript)

    首先遍历数组:
    1、用map.get(key)方法拿到当前元素出现的次数
    2、用map.set(key,value)方法 让其次数+1

    然后用 array.from(map) 方法将哈希表转换成数组
    (数组中的每个元素都是一个对象)
    并根据value值从大到小排序
    返回最大的value值所对应的key值

    var majorityElement = function(nums) {
        var myMap=new Map()
        for(let i=0;i<nums.length;i++){
            let v=myMap.get(nums[i])
            if(v!==undefined){
                v++
                myMap.set(nums[i],v)
            }else{
                myMap.set(nums[i],1)
            }
        }
    
        var arr=Array.from(myMap)
        arr.sort(function(a,b){
            return b[1]-a[1]
        })
    
        return arr[0][0]
    };
    

    注意到题目说:多数元素是指在数组中出现次数大于 n/2 的元素(且唯一)
    因此,我们可以在循环中,对v再做一层判断
    若v > n/2,则当前元素一定是我们要找的那个元素

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var majorityElement = function(nums) {
        var myMap=new Map()
        for(let i=0;i<nums.length;i++){
            let v=myMap.get(nums[i])
            if(v!==undefined){
                v++
                if(v>Math.floor(nums.length/2)){
                    return nums[i]
                }
                myMap.set(nums[i],v)
            }else{
                myMap.set(nums[i],1)
            }
        }
    
        var arr=Array.from(myMap)
        arr.sort(function(a,b){
            return b[1]-a[1]
        })
    
        return arr[0][0]
    };
    
  • 相关阅读:
    Bzoj4872: [Shoi2017]分手是祝愿
    大数据应用价值研究员--数据可视化工程师
    Angular Redux
    Reactive Redux
    Testing a Redux & React web application
    [转]于Fragment和Activity之间onCreateOptionsMenu的问题
    [转]探究java IO之FileInputStream类
    深入解析FileInputStream和FileOutputStream
    [转]慎用InputStream的read()方法
    [转]Android
  • 原文地址:https://www.cnblogs.com/baebae996/p/13914184.html
Copyright © 2020-2023  润新知