48 陣列中出現次數超過一半的數字

hellosc01發表於2020-11-20

1 題目描述

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。

你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

示例 1:

輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
輸出: 2

限制:

1 <= 陣列長度 <= 50000

2 解題(Java)

摩爾投票法: 核心理念為 票數正負抵消 。

class Solution {
    public int majorityElement(int[] nums) {
        int x = 0, votes = 0;
        for(int num : nums){
            if(votes == 0) x = num;
            votes += num == x ? 1 : -1;
        }
        return x;
    }
}

3 複雜性分析

  • 時間複雜度 O(N): N 為陣列 nums 長度。
  • 空間複雜度 O(1): votes 變數使用常數大小的額外空間。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof

相關文章