LeetCode - 169 - 求众数(majority-element)

栏目: IT技术 · 发布时间: 5年前

内容简介:LeetCode - 169 - 求众数(majority-element)

Create by jsliang on 2019-07-05 13:54:05
Recently revised in 2019-07-05 14:48:53

一 目录

不折腾的前端,和咸鱼有什么区别

| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | |  3.1 解法 - Map() |

二 前言

  • 难度:简单

  • 涉及知识:位运算、数组、分治算法

  • 题目地址:https://leetcode-cn.com/problems/majority-element/

  • 题目内容

  1. 给定一个大小为 n 的数组,找到其中的众数。

  2. 众数是指在数组中出现次数大于  n/2  的元素。

  3. 你可以假设数组是非空的,并且给定的数组总是存在众数。

  4. 示例 1:

  5. 输入: [3,2,3]

  6. 输出: 3

  7. 示例 2:

  8. 输入: [2,2,1,1,1,2,2]

  9. 输出: 2

三 解题

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

3.1 解法 - Map()

  • 解题代码

  1. var majorityElement = function(nums) {

  2. let map = new Map();

  3. for (let i = 0; i < nums.length; i++) {

  4. if (map.get(nums[i]) !== undefined) {

  5. map.set(nums[i], map.get(nums[i]) + 1);

  6. if (map.get(nums[i]) > nums.length / 2) {

  7. return nums[i];

  8. }

  9. } else {

  10. map.set(nums[i], 1);

  11. if (map.get(nums[i]) > nums.length / 2) {

  12. return nums[i];

  13. }

  14. }

  15. }

  16. };

  • 执行测试

  1. nums: [2,2,1,1,1,2,2]

  2. return: 2

  • LeetCode Submit

  1. Accepted

  2. 44/44 cases passed (96 ms)

  3. Your runtime beats 83.27 % of javascript submissions

  4. Your memory usage beats 24.14 % of javascript submissions (37.7 MB)

  • 知识点

  1. Map:保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。 Map 详细介绍

  • 解题思路

首先Map() 作为一个 有记忆功能Object,在 LeetCode 中经常以哈希算法的形式出现,是个非常实用的 API,小伙伴们可以尝试多使用几次,记住 Map() 的使用技巧。

然后jsliang 讲讲使用 Map() 的解题思路:

  1. 通过 for() 遍历一遍 nums

  2. 判断 nums 中的每个元素,如果在 Map() 中有存在,则将其出现次数 + 1,如果它的出现次数已经超过 nums.length/2,那么它就是众数。

  3. 然后,如果它没在 Map() 中存在,那么就直接存为 1,同时给个判断是否出现次数超过 nums.length/2,这是预防如果数组为 [1] 的情况。

这样,我们就完成了这道题的破解。

  • 进一步思考

除了 Map(),可能还有其他方法,这就需要小伙伴们去探索啦~


不折腾的前端,和咸鱼有什么区别!

LeetCode - 169 - 求众数(majority-element)

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

LeetCode - 169 - 求众数(majority-element)

jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++编程风格

C++编程风格

卡吉尔 / 聂雪军 / 机械工业出版社发行室 / 2007-1 / 25.00元

本书描述C++语言中较深层次的程序设计思想和使用方法,包含大量软件工程概念和设计模式,重点介绍大规模编程相关的内容,例如增加代码的可读性、可维护性、可扩展性以及执行效率等的方法。本书的示例代码都是从实际程序中抽取出来的,融人了作者的实际开发经验。讲解如何正确地编写代码以及避开一些常见的误区和陷阱,并给出了许多实用的编程规则,可快速提升读者的C++编程功力。   本书描述平实,示例丰富,适合有......一起来看看 《C++编程风格》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具