介绍
这篇文章主要讲解了Python怎么找出出现次数超过数组长度一半的元素,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
利用问题的普遍性和特殊性来求解,
代码如下:
进口unittest 从datetime进口datetime 类GetFreqNumbersFromList (unittest.TestCase): def设置(自我): 打印(“\ n") 自我。start_time=datetime.now () 打印(f"{自我。_testMethodName}: {self.start_time}“) def拆卸(自我): 自我。end_time=datetime.now () 打印(f"{自我。_testMethodName}: {self.end_time}“) exec_time=(自我。end_time - self.start_time) .microseconds 打印(f"{自我。_testMethodName} exec_time: {exec_time}“) def normal_solution(自我、_list _debug=False): “““ 普遍性解法 利用字典记录每个元素出现的次数,然后找出元素出现次数超过数组长度一半的元素 普遍性解法针对任何次数的统计均适用而不光只是针对出现次数超过数组长度一半的情况 “““ _target=len (_list)//2 _dict={} 在_list _member: 如果_member不在_dict: _dict。setdefault (_member, 1) 其他: _dict [_member] +=1 _ret=[_member _member _dict如果_dict [_member]比;_target] 如果_debug: 打印(_ret) 返回_ret def specific_solution(自我、_list _debug=False): “““ 特殊性解法 假设有两个元素出现的次数都超过数组长度一半就会得出两个元素出现的次数超出了数组长度的矛盾结果,所以超过数组长度一半的元素是唯一的 排序后在数组中间的一定是目标解 特殊性解法只能针对元素出现次数超过数组长度一半的情况 “““ _list.sort () 如果_debug: print (_list (len (_list)//2)) 返回_list (len (_list)//2) def test_normal_solution(自我): actual_result=自我。normal_solution([2、2、2、2、2、2、1, 1, 1, 1, 1),假) 自我。assertEqual (actual_result [0], 2) def test_specific_solution(自我): actual_result=自我。specific_solution([2、2、2、2、2、2、1, 1, 1, 1, 1),假) 自我。assertEqual (actual_result, 2) if __name__==癬_main__": #找出出现次数超过数组长度一半的元素 套件=unittest.TestSuite () suite.addTest (GetFreqNumbersFromList (& # 39; test_normal_solution& # 39;)) suite.addTest (GetFreqNumbersFromList (& # 39; test_specific_solution& # 39;)) 跑步者=unittest.TextTestRunner () runner.run(套件)
测试结果:
<强> Python用积分思想计算圆周率强>
早上起来突然想求圆周率,1单位时圆的面积。
代码如下:
看完上述内容,是不是对Python怎么找出出现次数超过数组长度一半的元素有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。Python怎么找出出现次数超过数组长度一半的元素