LeetCode多数元素使用JavaScript解题|前端学算法

简介: LeetCode多数元素使用JavaScript解题|前端学算法

多数元素


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

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

示例 1:

输入: nums = [3,2,3]

输出: 3

示例 2:

输入: nums = [2,2,1,1,1,2,2]

输出: 2


解题思路


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

所以考虑可以用map存储数据,把当前元素nums[i]当做key,出现的次数当做value,判断当前元素是否存在于map数据结构中,如果不存在则把他存储进去,并且初始值设为1,;如果存在则进行累加,且判断一下是否大于 nums.length/2,如果是则返回map值

具体步骤如下:

  • 第一步:初始化一个newMap
  • 第二步:判断一下nums长度,如果长度等于1则返回nums[0]
  • 第三步:遍历nums,判断newMap里面是否已经有nums[i],如果没有,则初始化值为1,;如果有,则进行累加,且判断一下是否大于 nums.length/2,如果是则返回当前值
var majorityElement = function(nums) {
    let newMap = new Map()
    if(nums.length === 1) return nums[0]
    for(let i=0;i<nums.length;i++){
        if(newMap.has(nums[i])){
            newMap.set(nums[i],newMap.get(nums[i])+1)
            if(newMap.get(nums[i])> nums.length/2){
                return nums[i]
            }
        }else{
             newMap.set(nums[i],1)
        }
    }
};


image.png


知识点


  • Map:对象保存键值对,并且能够记住键的原始插入顺序
// 初始化 Map
const contacts = new Map()
// 存储 键 值
contacts.set('Jessie', {phone: "213-555-1234", address: "123 N 1st Ave"})
// 判断map里是否有这个键
contacts.has('Jessie') // true
// 获取这个键(没有这个键的情况)
contacts.get('Hilary') // undefined
// 获取这个键(有这个键的情况)
contacts.get('Jessie') // {phone: "213-555-1234", address: "123 N 1st Ave"}
// 删除这个键(没有这个键的情况)
contacts.delete('Raymond') // false
// 删除这个键(有这个键的情况)
contacts.delete('Jessie') // true
// map的长度
console.log(contacts.size) // 1


目录
相关文章
|
24天前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
99 9
|
3月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
158 0
|
1月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
195 3
|
1月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
96 1
|
2月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
205 3
|
7月前
|
机器学习/深度学习 存储 算法
【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 347——前 K 个高频元素的三种解法:哈希表+小顶堆、哈希表+快速排序和哈希表+桶排序。每种方法都附有清晰的思路讲解和 Go 语言代码实现。小顶堆方法时间复杂度为 O(n log k),适合处理大规模数据;快速排序方法时间复杂度为 O(n log n),适用于数据量较小的场景;桶排序方法在特定条件下能达到线性时间复杂度 O(n)。文章通过对比分析,帮助读者根据实际需求选择最优解法,并提供了完整的代码示例,是一篇非常实用的算法学习资料。
447 90
|
7月前
|
JavaScript 前端开发 API
|
6月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
163 4
|
6月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
168 3
|
7月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
278 8

热门文章

最新文章