牛客微信红包
牛客微信红包算法实现代码如下:
```pythondef find_majority(data):
count =0 majority = None for num in data:
if count ==0:
majority = num count =1 elif num == majority:
count +=1 else:
count -=1 return majoritydef main():
data = [1,2,3,4,4,4,4,5,6,7,4,4,4,8,9,4,10,4,4]
result = find_majority(data)
print("The majority element is:", result)
if __name__ == "__main__":
main()
```
该算法用到的是摩尔投票算法,其基本思路是,遍历数组时维护一个候选众数,初始时将第一个数字作为候选众数,遇到相同的数字则将计数器加1,否则减1。当计数器为0时,重新选取新的候选众数。最终,选出的候选众数即为该红包金额。
算法的时间复杂度为O(n),其中n为红包总数。
解释:
1. 定义一个计数器count和一个候选众数majority,并将count初始化为02. 遍历红包金额数组,对于每个数字num:
- 如果count为0,将num选为候选众数,并将count加1 - 如果num与候选众数majority相同,将count加1 - 如果num与候选众数majority不同,将count减13. 最终选取的候选众数majority即为该红包金额将题目给定的红包金额数组赋值给data,调用find_majority函数找到该红包金额,并输出结果。
运行结果如下所示:
```
The majority element is:4```
因此,小明在查看领取红包记录时,发现的金额出现次数超过了红包总数的一半,且该金额为4元。