Python 找出出现次数超过数组长度一半的元素实例


Posted in Python onMay 11, 2020

利用问题的普遍性和特殊性来求解,

代码如下:

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 找出出现次数超过数组长度一半的元素实例

补充知识: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

以上这篇Python 找出出现次数超过数组长度一半的元素实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
Python脚本实现网卡流量监控
Feb 14 Python
Python本地与全局命名空间用法实例
Jun 16 Python
Android应用开发中Action bar编写的入门教程
Feb 26 Python
python实现TF-IDF算法解析
Jan 02 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
python的faker库用法
Nov 28 Python
用python求一重积分和二重积分的例子
Dec 06 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
Pycharm如何导入python文件及解决报错问题
May 10 #Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 #Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 #Python
python对接ihuyi实现短信验证码发送
May 10 #Python
python调用API接口实现登陆短信验证
May 10 #Python
aws 通过boto3 python脚本打pach的实现方法
May 10 #Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 #Python
You might like
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
PHP获取网卡地址的代码
2008/04/09 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
图片按比例缩放函数
2006/06/26 Javascript
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
深入浅析python 中的匿名函数
2018/05/21 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
pytest中文文档之编写断言
2019/09/12 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
史上最全面的Java面试题汇总!
2015/02/03 面试题
求职简历自荐信范文
2013/10/21 职场文书
自荐书模板
2013/12/15 职场文书
2016新年感言
2015/08/03 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Python代码实现双链表
2022/05/25 Python