題目描述
給定一個整型數組,找出主元素,它在數組中的出現次數嚴格大於數組元素個數的二分之一。
樣例1
輸入: [1, 1, 1, 1, 2, 2, 2]
輸出: 1
樣例2
輸入: [1, 1, 1, 2, 2, 2, 2]
輸出: 2
java題解
用一個count變量來計數,和一個val來記錄當前major數,每當count == 0時就更新val值,同樣本方法同樣可以用於數據流的情況,實時輸出major數
public class Solution {
public int majorityNumber(List<Integer> nums) {
if (nums == null || nums.size() == 0){
return -1;
}
int val = nums.get(0);
int count = 1;
for (int i = 1; i < nums.size(); i++){
count += nums.get(i) == val ? 1 : -1;
if (count == 0){
val = nums.get(i);
count++;
}
}
count = 0;
for (int n : nums){
if (n == val){
count++;
}
}
return count > nums.size() / 2 ? val : -1;
}
}
C++題解
使用count計數,相同++不同–。
主要思想是:因爲衆數超過總數的一半,所以不會被減到0以下。
class Solution {
public:
int majorityNumber(vector<int> &nums) {
// write your code here
if (nums.size() == 0) {
return -1;
}
int count = 0;
int major = nums[0];
for (int i = 0; i < nums.size(); i++) {
if (major == nums[i]) {
count++;
} else {
count--;
}
if (count == 0) {
major = nums[i];
count++;
}
}
count = 0;
for (int i = 0; i < nums.size(); i++) {
if (major == nums[i]) {
count++;
}
}
if (count > nums.size() / 2) {
return major;
}
return -1;
}
};
python題解
class Solution:
def majorityNumber(self, nums):
storedNumber = None
counter = 1
for num in nums:
if num == storedNumber:
counter += 1
else:
counter -= 1
if counter == 0:
storedNumber = num
counter = 1
return storedNumber