题目

169. 求众数

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

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

示例 1:

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

示例 2:

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

众数(Mode)是统计学名词,在统计分布上具有明显集中趋势点的数值,代表数据的一般水平(众数可以不存在或多于一个)。 修正定义:是一组数据中出现次数最多的数值,叫众数,有时众数在一组数中有好几个。用 M 表示。 理性理解:简单的说,就是一组数据中占比例最多的那个数。--《百度百科》

解答

解答一、对象中存储所有元素及出现次数

拿到题目,我的第一想法就是for循环,

使用for循环遍历元素并记下每个元素出现的次数,

存储在一个对象中。

代码如下:(leetcode已提交通过,执行用时:128ms)


/**
*未考虑nums数组元素个数为偶数的情况
*未考虑存在多个众数的情况
*未考虑不存在众数的情况
*未考虑数组中存在非数字的情况
*/

var majorityElement = function(nums) {
var obj={};
var halfNum=nums.length/2;
var mode;
if (nums.length===1) return nums[0];
for (let i=0;i<nums.length;i++){ //拆解数组中元素,赋值为对象的key
if(obj[nums[i]]){ //遍历,若已有该key,
obj[nums[i]]+=1; //对应的value+1
if(obj[nums[i]]>halfNum){ //若该key对应的value大于数组元素个数的半数
mode=nums[i];
return mode; //返回该key值
}
}else{
obj[nums[i]]=1; //若没有,加key,对应value赋值为1
}
}
};

解答二、假设法

for of 遍历,假设第一个数为众数,count计1,
其后的数字若相同则count 加1,否则count减1,
当count减为0时,假设此时新的num为众数,继续判断,
众数出现次数始终大于或等于所有元素个数的一半,
如果存在众数,最终一定存在一个num,使得count大于0,
!!缺点:若不存在众数,则会返回最后一个元素。

代码如下:(leetcode已提交通过,执行用时:104ms)

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

【Leetcode】【简单】【169求众数】【JavaScript】的更多相关文章

  1. Leetcode题目169.求众数(简单)

    题目描述: 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...

  2. Leetcode之分治法专题-169. 求众数(Majority Element)

    Leetcode之分治法专题-169. 求众数(Majority Element) 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是 ...

  3. [LeetCode] Majority Element 求众数

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  4. 169.求众数 leetcode Javascript

    给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] 输出: 3 ...

  5. LeetCode(169. 求众数)

    问题描述 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...

  6. Java实现 Leetcode 169 求众数

    public static int majorityElement(int[] nums) { int num = nums[0], count = 1; for(int i=1;i<nums. ...

  7. Leecode刷题之旅-C语言/python-169求众数

    /* * @lc app=leetcode.cn id=169 lang=c * * [169] 求众数 * * https://leetcode-cn.com/problems/majority-e ...

  8. Leetcode#169. Majority Element(求众数)

    题目描述 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...

  9. Leetcode 229.求众数II

    求众数II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: ...

随机推荐

  1. 找出二叉查找树中指定结点的”下一个&quot;结点(也即中序后继)

    设计一个算法.找出二叉查找树中指定结点的"下一个"结点(也即中序后继).能够假定每一个结点都含有指向父结点的连接. watermark/2/text/aHR0cDovL2Jsb2c ...

  2. 切换div位置

    通过数组来存放div的属性以及属性值,鼠标点击的时候,切换数组中的元素,然后赋值给div <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  3. js面向对象初步探究(上) js面向对象的5种写方法

    非常长一段时间看网上大神的JS代码特别吃力.那种面向对象的写法方式让人看得云里来雾里去.于是就研究了一下JS面向对象.因为是初学,就将自己在网上找到的资料整理一下,作为记忆. js面向对象的5种写方法 ...

  4. Gulp帮你自己主动搞定coffee和scss的compile

    今天继续说说gulp的watch,能够自己主动搞定非常多事情.不用每次都去敲命令了! 上次说到用gulp能够非常方便的进行css,js,html的压缩.而且能够对coffee和scss进行编译. cs ...

  5. SEO优化之外链的末日来临

    告诉大家一个好消息,以后不用再为外链的事情发愁了.难道是有好的外链工具?不是,而是百度已经取消外链了. 今天在百度上看到一篇文章:"SEO春天来了.百度取消外链".点击进去一看,吓 ...

  6. linux更改gitlab存储位置

    更改仓库存储位置默认时GitLab的仓库存储位置在“/var/opt/gitlab/git-data/repositories”,在实际生产环境中显然我们不会存储在这个位置,一般都会划分一个独立的分区 ...

  7. 【Java并发编程实战】—– AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形. 其主要从双方面进行了改造:节点的结构与节点等待机制.在结构上引入了 ...

  8. SQL server触发器、存储过程操作远程数据库插入数据,解决服务器已存在的问题

    近期弄了一个小项目,也不是非常复杂,须要将一个数据库的一些数据备份到另外一个库.不是本地,可能是网络上其它的数据库.想了一下,用了存储过程和触发器. 也不是非常复杂,首先我须要操作远程数据库,于是写了 ...

  9. oc55--ARC单个对象的内存管理

    // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @end // Person.m #i ...

  10. bzoj2132: 圈地计划(无比强大的最小割)

    2132: 圈地计划 题目:传送门 简要题意: 给出一个矩阵,一共n*m个点,并给出三个收益矩阵.A矩阵表示这个点建A的可取收益,B矩阵表示这个点建B的可取收益,C矩阵表示如果相邻(有且仅有一条公共边 ...