Python 找出出现次数超过数组长度一半的元素实例
作者:天外归云 发布时间:2023-06-07 05:50:33
标签:Python,数组,长度,元素
利用问题的普遍性和特殊性来求解,
代码如下:
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


猜你喜欢
- 写在前面Vue Router是Vue团队的研发的一款与Vue.js核心深度集成的一款路由插件,使Vue构建单页面程序变得非常的简单;Vue
- 目录1、封装1.1 私有属性和私有方法2、继承2.1 方法的重写2.2 在子类方法中调用父类方法2.3 多继承2.4 新式类和经典类3、多态
- 因公司服务器上部署应用较多,在有大并发访问、业务逻辑有问题的情况下反复互相调用或者有异常流量访问的时候,需要对业务应用进行故障定位,所以利用
- tk在科学养猪群里问bluerust、scz是否碰上过这个Python坑,示例1:bas = [ 'ba1', 'b
- 本文实例为大家分享了python实现文件批量重命名,供大家参考,具体内容如下讲解1、库:os2、代码效果:对指定文件夹内所有文件重命名为1,
- DECLARE @PAGESIZE INT DECLARE @PAGEINDEX INT DECLARE @PAGECOUNT INT DE
- 使用conda和pip批量安装Python包在debug Yolov5之前,需要按照其txt文件中指定的包的版本来指定安装工程需要的Pyth
- 我们在使用很多新闻系统的时候,都会发现一个问题,尤其是使用 HtmlEdit 从WORD文档中直接拷贝文章(尤其里面有复杂表格和文字)的时候
- 步骤如下:1.图片灰化;2.中值滤波 去噪3.求图片的光影(自动光学检测)4.除法去光影5.阈值操作6.实现了三种目标检测方法主要分两种连通
- 在VirtualBox中使用Ubuntu虚拟机中,会出现虚拟硬盘不够用的情况:查了一下磁盘空间,如下所示:df -H启动CMD命令行,进入V
- Strconvstrconv包实现了基本数据类型和其字符串表示的相互转换。更多函数请查看官方文档中文文档string与int类型转换Atoi
- 本文涵盖了一个简单的C实现的搜索引擎的搭建始末。我通常使用SQL Server和C #,但我教C/C++的朋友要远离微软。在过去
- 本文实例讲述了php生成curl命令行的方法。分享给大家供大家参考,具体如下:示例:curl "http://localhost/
- 我就废话不多说啦,还是直接看代码吧! from example.commons import Faker from pyecharts im
- 本文实例讲述了Python实现压缩文件夹与解压缩zip文件的方法。分享给大家供大家参考,具体如下:直接上代码#coding=utf-8#甄码
- 和大多数的语言脚本一样,学习ASP最好的方法就是亲身尝试ASP,使用你自己的系统安装PWS或者IIS。你可以边学习边在你自己的服务器上测试A
- 工作时需要取得MySQL中一个表的字段是否存在于是就使用Describe命令来判断mysql_connect(localhost, root
- 特殊情况有 * ^ : | . \一、单个符号作为分隔符String address="上海\上海市|闵行区\吴中路";
- 我和朋友对此的看法有分歧,我明明记得有不需要返回的时候的?你的看法是对的,例如在表中删除记录。我们来看看下面的例子——在Employee表中
- 我们的规范到底做到哪一步算是发挥良好的价值?其实一件事物我们理解错根本目的会导致出大不一样的结果,直接反应在设计师到底要体现什么的价值。想想