JS算法-多数元素

简介: JS算法-多数元素

题目


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

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


题解


第一种


我们首先通过右移操作将数组长度除以2,得到变量count,表示出现次数超过一半的元素需要出现的次数,如果数组长度为1,直接返回数组中的唯一元素即可,接下来进行遍历数组中的所有元素,对于遍历到的每个元素num,通过Map来存储它在数组中出现的次数,如果Map中没有这个元素,那么将其出现次数设为1,如果Map中已经有这个元素,那么将其出现次数加1,并判断它的出现次数是否超过了count,如果超过了count,说明找到了主要元素,直接返回该元素即可

function majorityElement(nums){
  let count = nums.length >> 1, map = new Map()
  if (nums.length === 1) return nums[0]
  for (let num of nums) {
    if (!map.has(num)) {
      map.set(num, 1)
    } else {
      let counts = map.get(num)
      counts++
      map.set(num, counts)
      if (counts > count) return num
    }
  }
};


第二种


首先我们定义了一个名为majorityElement的函数,它接收一个数组nums作为参数,然后我们计算了数组的长度n,如果数组长度小于2,直接返回数组中唯一的元素,在随机生成了一个下标x,用于在数组中随机选择一个元素。接下来的循环中,会遍历整个数组,如果数组中的元素等于nums[x],那么计数器sum就会加1。如果sum的值超过了数组长度的一半,那么就找到了主要元素,直接返回nums[x],如果在一次遍历中没有找到主要元素,就将计数器sum重置为0,重新随机生成一个下标x,继续下一轮循环。循环会一直进行下去,直到找到主要元素为止

const majorityElement = (nums) => {
  let n = nums.length
  if (n < 2) return nums[0]
  let x = parseInt(Math.random() * n)
  let sum = 0
  while (1) {
    for (var i = 0; i < n; i++) {
      if (nums[i] == nums[x]) {
        console.log(nums[x], i);
        sum++;
        if (sum > n / 2) return nums[x]
      }
    }
    sum = 0
    x = parseInt(Math.random() * n)
  }
}
相关文章
|
1月前
|
JavaScript 前端开发
JavaScript操作DOM元素
JavaScript操作DOM元素
12 1
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
23 1
|
1月前
|
JavaScript 前端开发
JavaScript如何遍历表单元素?
JavaScript如何遍历表单元素?
|
2月前
|
算法 JavaScript 前端开发
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(下)
至于分发?我们可以参考一下市面上已有的一些概念做一下对比,下面是笼统的一个网络服务器的TPS预估值,也就是说彩票服务器在1秒内可以处理的最大请求数:
|
2月前
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
9天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
14 3
|
11天前
|
JavaScript 前端开发
js怎么删除html元素
js怎么删除html元素
23 10
|
11天前
|
JavaScript 前端开发
js添加、删除、替换或插入元素。
js添加、删除、替换或插入元素。
8 0
|
18天前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
1月前
|
JSON JavaScript 前端开发
JavaScript随手笔记---数组中相同的元素进行分组(数据聚合) groupBy函数
JavaScript随手笔记---数组中相同的元素进行分组(数据聚合) groupBy函数