力扣-求众数

简介: 力扣-求众数

前言

数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有写出高质量代码的潜意识

一、问题描述

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3]
输出:3

示例 2:

输入:[2,2,1,1,1,2,2]
输出:2

进阶:

  • 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题

二、思路讲解

2.1 哈希表解法

方法很简单,迭代数组的每一项,存入哈希表当中,如果存在就将其值+1,最后返回值最大的那一项。

var majorityElement = function(nums) {
    const map = new Map()
    let maxNum = 0
    let max = 0
    for(const num of nums){
        if(map.has(num)){
            map.set(num,map.get(num)+1)
        }else{
            map.set(num,1)
        }
    }
    for(const [key,value] of map){
        if(value>max){
            max = value
            maxNum = key
        }
    }
    return maxNum
};

2.2 排序法

问题中说到,众数是数组中个数大于 n/2 的元素,那么排序完返回最中间的元素即可。

var majorityElement = function(nums) {
    nums.sort((a,b)=>a-b)
    return nums[(nums.length)>>1] // nums.length >> 1  等同于 Math.floor(nums.length / 2)
};

2.3 投票法

投票法啥意思呢? 就是遇到同样的数字就票数+1,不同就票数-1,记录当前票数不为零的值。

var majorityElement = function(nums) {
    let count = 0 , res
    for(const num of nums){
        if(count==0){
            res = num
        }
        count += res === num ? 1 : -1
    }
    return res
};

三、测试结果

后续

好了,本篇 力扣-求众数到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。


相关文章
|
4月前
|
Java C++ Python
leetcode-977:有序数组的平方
leetcode-977:有序数组的平方
27 0
|
4月前
|
Java C++ Python
leetcode-501:二叉搜索树中的众数
leetcode-501:二叉搜索树中的众数
19 0
|
4月前
leetcode501二叉搜索树中的众数刷题打卡
leetcode501二叉搜索树中的众数刷题打卡
14 0
|
8月前
|
算法 编译器
LeetCode4-寻找两个有序数组的中位数
LeetCode4-寻找两个有序数组的中位数
|
11月前
|
测试技术 C++
力扣16-最接近的三数之和&力扣18-四数之和
力扣16-最接近的三数之和&力扣18-四数之和
57 0
|
11月前
|
算法 API
leetcode:4.寻找两个有序数组的中位数
题目比较好理解,如果只看最后结果的话,很容易想到把两个数组合并,并且排序后就可以轻松的找到中位数,但这样不符合题目的意思
56 0
每日一题:Leetcode977 有序数组的平方
每日一题:Leetcode977 有序数组的平方
|
算法 搜索推荐
LeetCode:977. 有序数组的平方
题目描述:给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
有序数组的平方(力扣)
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
28 0
leetcode 501 二叉搜索树中的众数
leetcode 501 二叉搜索树中的众数
34 0
leetcode 501 二叉搜索树中的众数