Python 找出出现次数超过数组长度一半的元素实例
作者:天外归云 时间:2023-06-07 05:50:33
利用问题的普遍性和特殊性来求解,
代码如下:
import unittest
from datetime import datetime
class GetFreqNumbersFromList(unittest.TestCase):
def setUp(self):
print("\n")
self.start_time = datetime.now()
print(f"{self._testMethodName} start: {self.start_time}")
def tearDown(self):
self.end_time = datetime.now()
print(f"{self._testMethodName} end: {self.end_time}")
exec_time = (self.end_time - self.start_time).microseconds
print(f"{self._testMethodName} exec_time: {exec_time}")
def normal_solution(self, _list, _debug=False):
"""
普遍性解法
利用字典记录每个元素出现的次数——然后找出元素出现次数超过数组长度一半的元素
普遍性解法针对任何次数的统计均适用而不光只是针对出现次数超过数组长度一半的情况
"""
_target = len(_list) // 2
_dict = {}
for _member in _list:
if _member not in _dict:
_dict.setdefault(_member, 1)
else:
_dict[_member] += 1
_ret = [_member for _member in _dict if _dict[_member] > _target]
if _debug:
print(_ret)
return _ret
def specific_solution(self, _list, _debug=False):
"""
特殊性解法
假设有两个元素出现的次数都超过数组长度一半就会得出两个元素出现的次数超出了数组长度的矛盾结果——所以超过数组长度一半的元素是唯一的
排序后在数组中间的一定是目标解
特殊性解法只能针对元素出现次数超过数组长度一半的情况
"""
_list.sort()
if _debug:
print(_list[len(_list) // 2])
return _list[len(_list) // 2]
def test_normal_solution(self):
actual_result = self.normal_solution([2,2,2,2,2,2,1,1,1,1,1], False)
self.assertEqual(actual_result[0], 2)
def test_specific_solution(self):
actual_result = self.specific_solution([2,2,2,2,2,2,1,1,1,1,1], False)
self.assertEqual(actual_result, 2)
if __name__ == "__main__":
# 找出出现次数超过数组长度一半的元素
suite = unittest.TestSuite()
suite.addTest(GetFreqNumbersFromList('test_normal_solution'))
suite.addTest(GetFreqNumbersFromList('test_specific_solution'))
runner = unittest.TextTestRunner()
runner.run(suite)
测试结果:
补充知识:Python 用积分思想计算圆周率
早上起来突然想求圆周率,1单位时圆的面积。
代码如下:
from math import pow, sqrt
def calc_circle_s_with(r, dy, x_slices):
x_from_start_to_cc = sqrt(1 - pow(dy, 2))
dx = x_from_start_to_cc / x_slices
x_to_edge = 1 - x_from_start_to_cc
quarter_circle_s = 0
while x_to_edge < 1:
rect_s = dy * dx
quarter_circle_s += rect_s
x_to_edge = x_to_edge + dx
dy = sqrt(1 - pow((1 - x_to_edge), 2))
circle_s = 4 * quarter_circle_s
print(circle_s)
calc_circle_s_with(1, 0.0001, 10000000)
运行结果接近3.1415926,dy传的越小,x_slices传的越大,就越接近。
半径为:1
初始小矩形到圆周的距离:1 - x_from_start_to_cc
其中dy代表四分之一圆中初始小矩形的高度,x_slices代表小矩形的宽度:(1 - x_from_start_to_cc) / x_slices
四分之一圆的面积积分为:quarter_circle_s
来源:https://www.cnblogs.com/LanTianYou/p/12156811.html
标签:Python,数组,长度,元素


猜你喜欢
8个js表单验证函数
2007-10-28 19:19:00
如何查询占CPU高的oracle进程
2024-01-27 13:16:54
MySQL InnoDB 锁的相关总结
2024-01-18 16:14:55

Python读取word文本操作详解
2023-08-23 15:32:50

Git基本概述
2023-12-07 14:13:28

python paramiko实现ssh远程访问的方法
2021-07-17 23:03:55
TIOBE编程语言排行榜前20的语言入门书籍推荐
2023-04-05 12:19:48

python实现批量命名照片
2021-11-03 18:07:42

iisschlp.wsc [88,25] 属性值无效 : progid
2022-06-08 11:09:59

pyecharts实现数据可视化
2023-05-24 06:18:48

MySQL server has gone away 问题的解决方法
2024-01-18 11:46:11
Python 反转输出正整数的操作
2021-05-04 18:37:16

FSO组件之文件操作(下)
2010-05-03 11:10:00
浅谈Go切片的值修改是否会覆盖数组的值
2024-04-26 17:18:19
MySQL适配器PyMySQL详解
2024-01-16 23:49:11
pampy超强的模式匹配工具的实现
2023-03-05 23:05:07
阿里巴巴中秋节logo设计的艰辛曲折过程
2008-09-11 17:15:00

php floor()函数案例详解
2023-06-14 16:13:03
Laravel框架用户登陆身份验证实现方法详解
2024-04-30 08:47:12
Python爬虫练习汇总
2023-04-27 03:16:37
