多数元素

此博客链接:

多数元素

题目链接: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;
    }
}

 

结果

 

posted @ 2021-08-13 11:06  萍2樱释  阅读(47)  评论(0编辑  收藏  举报