1. 程式人生 > 實用技巧 >LeetCode169-多數元素

LeetCode169-多數元素

非商業,LeetCode連結附上:

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) 的演算法解決此問題。

程式碼實現:

//解決的方法比較多,這裡只介紹一種,也是最開始使用,並官方題解裡面詳細介紹的
//Boyer-Moore 投票演算法
public int majorityElement(int[] nums) {
        int count = 0;
        Integer candidate = null;

        for (int num : nums) {
            if (count == 0) {
                candidate = num;
            }
            count += (num == candidate) ? 1 : -1;
        }

        return candidate;
}

//以上方法改進版(上面的方法執行時間比較長,可能是因為使用了Integer,裝箱拆箱需要時間)
public int majorityElement(int[] nums) {
        
        //由於題目中提到陣列非空,因此不再進行非空判斷
        int count = 1;
        int candicate = nums[0];

        for(int i = 1; i < nums.length; i++) {
            if(count == 0) {
                candicate = nums[i];
            }
            count += (candicate == nums[i])? 1 : -1;
        }

        return candicate;        
}
//時間複雜度O(n),空間複雜度O(1)
    

  

思考:

題目的解決方案不止一種,可能就像人生的路不止一條吧,但就像演算法追求高效、清晰等,人生的路也不能走的太糙吧。

--End