题目地址(39. 数组中出现次数超过一半的数字)
https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000注意:本题与主站 169 题相同:https://leetcode-cn.com/problems/majority-element/
前置知识
公司
- 暂无
思路
关键点
代码
- 语言支持:Java
Java Code:
hash表
class Solution {public int majorityElement(int[] nums) {int count = nums.length/2;HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {if (map.containsKey(nums[i])) {map.put(nums[i], map.get(nums[i]) + 1);}else{map.put(nums[i], 1);}if (map.get(i) > count) {return nums[i];}}return 0;}}
排序
class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=GgXcX)
- 空间复杂度:
#card=math&code=O%28n%29&id=s9GAb)
