zoukankan      html  css  js  c++  java
  • 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]
    };
    
  • 相关阅读:
    LeetCode 45 Jump Game II
    LeetCode 54. Spiral Matrix
    LeetCode 53. Maximum Subarray
    LeetCode 52. N-Queens II
    智齿的秘密
    《婚姻故事》观影笔记
    为什么在linux系统下安装anaconda的时候会报错
    pandas时间序列学习笔记
    极大似然估计和最小二乘法
    粗糙集学习笔记
  • 原文地址:https://www.cnblogs.com/baebae996/p/13914184.html
Copyright © 2011-2022 走看看