此博客链接:
多数元素
题目链接:https://leetcode-cn.com/problems/majority-element/
题目
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:[3,2,3]
输出:3
示例 2:
输入:[2,2,1,1,1,2,2]
输出:2
进阶:
尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。
题解
使用map,把数组中元素当成键,把数组中的元素个数当成值,再次遍历map,找值大于2/n的键是多少。
代码
class Solution { public int majorityElement(int[] nums) { Map <Integer,Integer> map=new HashMap(); for(int num:nums){ int count=map.getOrDefault(num,0)+1; map.put(num,count); } int min=nums.length/2; for(Integer temp:map.keySet()) { // System.out.println(temp); // System.out.println(map.get(temp)); if(map.get(temp)>min) { return temp; } } return 0; } }
结果
只出现一次的元素
题目链接:https://leetcode-cn.com/problems/single-number/
题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
题解
此题和上面一题的思路是一样的,使用Map来存储元素的值,元素的个数存储在value中,最后遍历Map,判断元素个数为一的元素是哪个。
代码
class Solution { public int singleNumber(int[] nums) { Map <Integer,Integer> map=new HashMap(); for(Integer num:nums) { int count=map.getOrDefault(num,0)+1; map.put(num,count); } for(Integer temp:map.keySet()) { if(map.get(temp)==1) { return temp; } } return -1; } }
结果