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删除windows垃圾文件的方法
Jul 14 Python
Django中处理出错页面的方法
Jul 15 Python
Python与R语言的简要对比
Nov 14 Python
django_orm查询性能优化方法
Aug 20 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
numpy 声明空数组详解
Dec 05 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
python中os.path.join()函数实例用法
May 26 Python
Python初学者必备的文件读写指南
Jun 23 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 Error与Logging函数的深入理解
2013/06/03 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
Python每天必学之bytes字节
2016/01/28 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Django进阶之CSRF的解决
2018/08/01 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
python中sys模块是做什么用的
2020/08/16 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
晚宴邀请函范文
2014/01/15 职场文书
大学活动邀请函
2014/01/28 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript