LeetCode169-多數元素
阿新 • • 發佈:2021-01-07
非商業,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