數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。
你可以假設數組是非空的,並且給定的數組總是存在多數元素。
示例 1:
輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
輸出: 2
限制:
1 <= 數組長度 <= 50000
題解:
class Solution {
public int majorityElement(int[] nums) {
//需要的數字出現次數多於一半,那麼排序後這個數字必定位於中間,複雜度爲O(nlogn)
// Arrays.sort(nums);
// return nums[nums.length / 2];
// 也可以理解成混戰極限一換一,不同的兩者一旦遇見就同歸於盡,最後活下來的值都是相同的,即要求的結果
//時間O(n),空間O(1)
int count = 0;
int card = 0;
for(int num:nums){
if(count == 0) card = num;
count += (card == num)?1:-1;
}
return card;
}
}