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开发之str.format()用法实例分析
Feb 22 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python中元组,列表,字典的区别
May 21 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
python numpy 显示图像阵列的实例
Jul 02 Python
使用Scrapy爬取动态数据
Oct 21 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
利用python生成照片墙的示例代码
Apr 09 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
Python如何将模块打包并发布
Aug 30 Python
python调用百度AI接口实现人流量统计
Feb 03 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
PHP 身份验证方面的函数
2009/10/11 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
详解Vue组件实现tips的总结
2017/11/01 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
python 自动提交和抓取网页
2009/07/13 Python
Python中的hypot()方法使用简介
2015/05/18 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
大学新生军训方案
2014/05/03 职场文书
城管大队整治方案
2014/05/06 职场文书
公司捐款倡议书
2014/05/14 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
机动车登记业务委托书
2014/10/08 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书