剑指 Offer 39. 数组中出现次数超过一半的数字

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

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

 

示例 1:

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

示例 2:

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

https://leetcode-cn.com/problems/majority-element/

 1 class Solution {
 2     private Map<Integer, Integer> countNums(int[] nums) {
 3      Map<Integer, Integer> counts = new HashMap <Integer, Integer>();
 4         for(int num : nums){
 5             if(!counts.containsKey(num)) {
 6                 counts.put(num, 1);
 7             }
 8             else {
 9                 counts.put(num, counts.get(num) + 1);
10             }
11             
12         }
13         return counts;
14     }
15     
16     public int majorityElement(int[] nums) {
17         Map<Integer, Integer> counts = countNums(nums);
18         
19         Map.Entry<Integer, Integer> majorityEntry = null;
20         //映射中包含的映射的一个集合视图 
21         for(Map.Entry<Integer, Integer> entry : counts.entrySet()) {
22             //找出最大的value
23             if(majorityEntry == null || entry.getValue() > majorityEntry.getValue()){
24             majorityEntry = entry;
25         }
26     }
27     return majorityEntry.getKey();
28 }
29 }

Interface Map.Entry<K,V>

  • 所有已知实现类:
    AbstractMap.SimpleEntryAbstractMap.SimpleImmutableEntry
    Enclosing interface:
    Map < KV >
    •  getValue

      V getValue()
      返回对应于此项的值。如果映射已从支持Map删除(由迭代器的 remove操作),这个调用的结果是不确定的。
      结果
      此条目对应的值
      异常
      IllegalStateException -实现可能,但不要求,如果入口已经从支持Map删除抛出该异常。 


    public static interface Map.Entry<K,V>
    Map输入(键-值对)。的 Map.entrySet方法返回一个Map的集合视图,它的元素是这类。获得一个参考Map进入只有方式是从这个集合视图迭代器。这些 Map.Entry对象为迭代的持续有效的只有;更正式,如果支持Map已经入境后被返回的迭代器修改Map进入的行为是未定义的,除了通过 setValue操作在Map入口。 
    • get

      V get(Object key)
      返回指定的键映射的值,或 null如果这个Map不包含的键映射。

      更正式地说,如果这个图中包含了从关键k到价值v这样(key==null ? k==null : key.equals(k))映射,那么这个方法返回v;否则返回null。(最多只能有一个这样的映射。)

      如果Map允许空值,那么一个null返回值不必要地表明Map不包含的键映射;也有可能是Map明确地映射到null的关键,containsKey操作可用于区分这两例。

      参数
      key -关键的相关值被返回
      结果
      值,指定的键映射,或 null如果这个Map不包含的键映射
      异常
      ClassCastException如果关键是这张图的不恰当的类型( optional
      NullPointerException -如果指定的键是无效的,这张Map不允许null键( optional
    • put

      V put(K key,
            V value)
      将指定的值与此映射中的指定键关联(可选操作)。如果映射以前包含一个键的映射,旧值将被指定的值替换。(图 m说含有一个关键的 k映射当且仅当 m.containsKey(k)将返回 true。)
      参数
      key键与指定的值是相关联的
      value值必须与指定键关联
      结果
      key以前的值,或者 null如果没有映射的 key。(一 null返回也表明Map以前相关的 nullkey,如果实施支持 null值。)
      异常
      UnsupportedOperationException -如果 put操作不该Map支持
      ClassCastException如果类指定的键或值防止它被存储在这个Map
      NullPointerException -如果指定的键或值为空,这张Map不允许null键或值
      IllegalArgumentException如果一些属性指定的键或值防止它被存储在这个Map  

 

  • entrySet

    Set<Map.Entry<K,V>> entrySet()
    返回一个 Set映射的视图包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的 remove操作,或通过 setValue操作返回的迭代器的映射项)的迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过 Iterator.removeSet.removeremoveAllretainAllclear操作。它不支持 addaddAll操作。
    结果
    映射中包含的映射的一个集合视图 
posted @ 2020-09-28 18:10  小树木  阅读(131)  评论(0编辑  收藏  举报