[剑指offer][JAVA]面试题第[39]题[数组中出现次数超过一半的数字][HashMap][摩尔投票法]
【問題描述】[簡單]
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。你可以假設數組是非空的,并且給定的數組總是存在多數元素。示例 1:輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 輸出: 2限制:1 <= 數組長度 <= 50000【解答思路】
1. 哈希表統計法
哈希表統計法: 遍歷數組 nums ,用 HashMap 統計各數字的數量,最終超過數組長度一半的數字則為眾數。此方法時間和空間復雜度均為 O(N)O(N) 。
時間復雜度:O(N) 空間復雜度:O(N)
2. 摩爾投票法 最佳
核心理念為 “正負抵消”
時間復雜度:O(N) 空間復雜度:O(1)
3. 數組排序法
將數組 nums 排序,由于眾數的數量超過數組長度一半,因此 數組中點的元素 一定為眾數。
時間復雜度:O(NlogN) 空間復雜度:O(1)
【總結】
1.Java中HashMap遍歷幾種方式
2.HashMap常用語法
1.import java.util.HashMap;//導入;
2.HashMap<K, V> map=new HashMap<K, V>();//定義map,K和V是類,不允許基本類型;
3.void clear();//清空
4.put(K,V);//設置K鍵的值為V
5.V get(K);//獲取K鍵的值
6.boolean isEmpty();//判空
7.int size();//獲取map的大小
8.V remove(K);//刪除K鍵的值,返回的是V,可以不接收
9.boolean containsKey(K);//判斷是否有K鍵的值
10.boolean containsValue(V);//判斷是否有值是V
11.Object clone();//淺克隆,類型需要強轉;如HashMap<String , Integer> map2=(HashMap<String, Integer>) map.clone();
3. 一題多解 熟悉掌握一種 其他掌握思想
轉載鏈接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/solution/mian-shi-ti-39-shu-zu-zhong-chu-xian-ci-shu-chao-3/
參考鏈接:https://blog.csdn.net/gary0917/article/details/79783713
參考鏈接:https://www.cnblogs.com/shoulinniao/p/11966194.html
總結
以上是生活随笔為你收集整理的[剑指offer][JAVA]面试题第[39]题[数组中出现次数超过一半的数字][HashMap][摩尔投票法]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基本数据结构——栈
- 下一篇: JQuery链式操作简单的菜单列表