自学做包装设计的步骤,优化是什么意思?,如何做点对点视频网站,做网站要买多少服务器空间目录
题目描述
前置知识
代码
方法一 排序法
思路
实现
复杂度
方法二 哈希表
思路
实现 题目描述 给定一个大小为 n 的数组 nums #xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的#xff0c;并且给…
目录
题目描述
前置知识
代码
方法一 排序法
思路
实现
复杂度
方法二 哈希表
思路
实现 题目描述 给定一个大小为 n 的数组 nums 返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的并且给定的数组总是存在多数元素 示例 1 输入nums [3,2,3]
输出3 示例 2 输入nums [2,2,1,1,1,2,2]
输出2 前置知识 哈希表
代码 方法一 排序法
思路
如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序那么下标为的元素下标从 0 开始一定是多数
实现
class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}
}复杂度
时间复杂度O(nlogn)。将数组排序的时间复杂度为 O(nlogn)空间复杂度O(logn)
方法二 哈希表
思路
我们知道出现次数最多的元素大于 次所以可以用哈希表来快速统计每个元素出现的次数。
实现
class Solution {private MapInteger, Integer countNums(int[] nums) {MapInteger, Integer counts new HashMapInteger, 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) {MapInteger, Integer counts countNums(nums);Map.EntryInteger, Integer majorityEntry null;for (Map.EntryInteger, Integer entry : counts.entrySet()) {if (majorityEntry null || entry.getValue() majorityEntry.getValue()) {majorityEntry entry;}}return majorityEntry.getKey();}
}
复杂度
时间复杂度O(n)空间复杂度O(n)