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 相关文章推荐
Python内置函数OCT详解
Nov 09 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python版百度语音识别功能
Jul 09 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
Python装饰器结合递归原理解析
Jul 02 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 Python
python not运算符的实例用法
Jun 30 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 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
php正则
2006/07/07 PHP
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
vue利用axios来完成数据的交互
2018/03/23 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
python追加元素到列表的方法
2015/07/28 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
python实现xml转json文件的示例代码
2020/12/30 Python
python爬虫如何解决图片验证码
2021/02/14 Python
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
餐饮总经理岗位职责
2014/03/07 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
高三毕业寄语
2014/04/10 职场文书
大型演出策划方案
2014/05/28 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
自我检讨书怎么写
2015/05/07 职场文书
离婚纠纷代理词
2015/05/23 职场文书
检讨书格式
2019/04/25 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers