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
0
投稿
猜你喜欢
- 有时在浏览网页时,常常因为网页中的图片文件过大而使下载时间较长,这样还没有下载完,就会有许多浏览者不耐烦地拂袖而去,从而损失了客户流。但要使
- josn基本操作1.导入import json2.字典转json:json.dumps(dict,ensure_ascii=False),加
- 星爷的一部“国产007”应该是无人不晓,其中一个片段是将“007”向MM展示他的秘密武器。皮鞋可以吹头发,大哥大可以刮胡子……把真实功能隐蔽
- 这篇文章主要介绍了python使用opencv在Windows下调用摄像头实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有
- pandas模块pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同
- 1.安装Python-LDAP(python_ldap-2.4.25-cp27-none-win_amd64.whl)pip install
- m3u8原理当我们在网页播放视频时,网页向服务器发起一个以.m3u8结尾的连接请求,服务器会将具体的.ts文件链接路径发送给网页,网页接收这
- 也许你刚刚来到一家公司,他们希望进行一些“可用性”工作。你可能是一名UI设计师,业务分析师,或前端开发人员,一名产品经理,或者负责用户体验部
- 简介到目前为止,我们查阅anaconda的官网可发现,由于目前Anaconda没有支持arm架构的版本,在M1芯片Mac上安装的Anacon
- C语言是编译型语言,经过编译后,生成机器码,然后再运行,执行速度快,不能跨平台,一般用于操作系统,驱动等底层开发。Python是编译型还是解
- 简单的LSTM问题,能够预测一句话的下一个字词是什么固定长度的句子,一个句子有3个词。使用one-hot编码各种引用import keras
- 昨时要导一些数据,从网上搜到的。字段多时insert 语句生成的不完整了,还没有找到原因..有个缺点……就是标识种子的列 也insert了c
- 由于存在函数内部不能访问全局作用的,所以就需要一种可以引入上一级作用域的语法结构,可以通过use使用函数声明时所在作用域的变量的值。php的
- //清空form选择 function clearForm(id){ var formObj = document.getElementBy
- 在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密。比如密码中比较常见的MD5加密,以及AES加密等等。对于密码认证来说,M
- 一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函
- 1、标识符由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。2、保留字符不能与标识符相同。3、不能包含空格、@、%和$等特
- 今天的这篇文章是讲XHTML中的细节部分的,这篇续述的主题就是ID与CLASS怎么用,在标题中有提及使用原则与技巧,这里的使用原则与技巧是我
- 使用opencv将图片转为灰度图主要有两种方法,第一种是将彩 * 转为灰度图,第二种是在使用OpenCV读取图片的时候直接读取为灰度图。将彩色
- 这个主要应用于,获取用户输入的时候,防止用户不小心,多输入了一个空格,导致验证无法通过,多用于用户名跟密码的,好多情况下,大家复制的winr