当前位置: 首页 > news >正文

leetcode经典面试150题---5.多数元素

目录

题目描述

前置知识

代码

方法一 排序法

思路

实现

复杂度

方法二 哈希表

思路

实现


题目描述


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

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

示例 1:

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

示例 2:

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

前置知识


  • 哈希表

代码


方法一 排序法

思路

如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为(n/2)的元素(下标从 0 开始)一定是多数

实现

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}
}

复杂度

  • 时间复杂度:O(nlogn)。将数组排序的时间复杂度为 O(nlog⁡n)
  • 空间复杂度:O(log⁡n)

方法二 哈希表

思路

  • 我们知道出现次数最多的元素大于 2/n次,所以可以用哈希表来快速统计每个元素出现的次数。

实现

class Solution {private Map<Integer, Integer> countNums(int[] nums) {Map<Integer, Integer> counts = new HashMap<Integer, Integer>();for (int num : nums) {if (!counts.containsKey(num)) {counts.put(num, 1);} else {counts.put(num, counts.get(num) + 1);}}return counts;}public int majorityElement(int[] nums) {Map<Integer, Integer> counts = countNums(nums);Map.Entry<Integer, Integer> majorityEntry = null;for (Map.Entry<Integer, Integer> entry : counts.entrySet()) {if (majorityEntry == null || entry.getValue() > majorityEntry.getValue()) {majorityEntry = entry;}}return majorityEntry.getKey();}
}

复杂度

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
http://www.lryc.cn/news/219480.html

相关文章:

  • Vue ElementUI el-tooltip 全局样式修改
  • MATLAB_5MW风电永磁直驱发电机-1200V直流并网MATLAB仿真模型
  • 11.4商业伦理(全)
  • 【漏洞复现】S2-045 Remote Code Execution(CVE-2017-5638)
  • Linux----------------Shell重定向输入输出
  • apachesolr中简单使用
  • C++多线程编程:其一、thread类概述
  • C++11 initializer_list 轻量级初始化列表的使用场景(让自定义类可以用初始化列表的形式来实例化对象)
  • 请求地址‘/operlog‘,发生未知异常
  • Makefile 保姆级使用教程
  • 【GitHub】Watch、Star、Fork、Follow 有什么区别?
  • MyBatis实现多表映射、分页显示、逆向工程
  • C++基础面试题
  • asp.net人事管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • 【Docker】Docker中 的AUFS、BTRFS、ZFS、存储池概念的详细讲解
  • 华为云运维小结
  • Firefox 119 正式发布
  • apachesolr启动带调试
  • 【MATLAB】基于灰狼优化算法优化BP神经网络 (GWO-BP)的数据回归预测
  • 雨水收集设施模块把雨水收集起来,经简单处理用于消防洗车冲厕等
  • Mac机RVM安装,手动下载安装,经过验证可以正常使用
  • 人工智能-深度学习之延后初始化
  • Jupyter Notebook交互式开源笔记本工具
  • 基于晶体结构算法的无人机航迹规划-附代码
  • 刷题笔记day11-栈与队列2
  • ngixn的指令
  • 管理类联考——数学——汇总篇——知识点突破——代数——函数、方程——记忆
  • 2014年亚太杯APMCM数学建模大赛C题公共基础课教师专业化培养方式研究求解全过程文档及程序
  • 【广州华锐互动】VR历史古城复原:沉浸式体验古代建筑,感受千年风华!
  • http和https分别是什么?