劍指offer66題--Java實現,c++實現和python實現 28.陣列中出現次數超過一半的數字
阿新 • • 發佈:2018-12-29
題目描述
陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
C++
class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { int n = numbers.size(); if (n == 0) return 0; int num = numbers[0], count = 1; for (int i = 1; i < n; i++) { if (numbers[i] == num) count++; else count--; if (count == 0) { num = numbers[i]; count = 1; } } // Verifying count = 0; for (int i = 0; i < n; i++) { if (numbers[i] == num) count++; } if (count * 2 > n) return num; return 0; } };
JAVA
public class Solution { public int MoreThanHalfNum_Solution(int [] array) { int target = array[array.length/2]; int n = 0; for(int i=0;i<array.length;i++){ if(array[i]==target) n++; } if(n>array.length/2) return target; return 0; } }
Python
# -*- coding:utf-8 -*- from collections import Counter class Solution: def MoreThanHalfNum_Solution(self, numbers): if not numbers: return 0 res = 0 times = 0 for i, num in enumerate(numbers): if times == 0: res = num times = 1 elif num == res: times += 1 else: times -= 1 return res if numbers.count(res) > len(numbers) / 2 else 0