题目
这道题如果分析透彻一些,可以减少不必要的代码:首先题目说给的数组里面必有众数,因此众数的有无不需要判断;其次众数是次数出现超过一半的数字,因此众数最多也只能有一个,因此众数只需要用一个变量存储即可,不需要用列表或者数组。
暴力解法
暴力解法很容易想到,但是容易想到的方法往往实现效率也是很低的。直接用两轮循环进行计数即可。
时间复杂度是O(n^2),空间复杂度是O(1)。显然是以时间换空间。
Python实现
input_list=[2,2,1,1,1,2,2]
output_list=set()
for i in range(len(input_list)):
cnt = 0
for j in range(len(input_list)):
if input_list[j] == input_list[i]:
cnt+=1
if cnt > len(input_list)/2:
output_list.add(input_list[i])
print(output_list.pop())
C++实现
#include <iostream>
#include <set>
using namespace std;
int main(){
int a[7]={2,2,1,1,1,2,2};
set<int>