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的字典和列表的使用中一些需要注意的地方
Apr 24 Python
python生成验证码图片代码分享
Jan 28 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
python selenium循环登陆网站的实现
Nov 04 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
python Timer 类使用介绍
Dec 28 Python
Pandas 数据编码的十种方法
Apr 20 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代码(抓取网页中的邮箱地址)
2012/07/17 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
php文件包含的几种方式总结
2019/09/19 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python实现批量转换文件编码的方法
2015/07/28 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
python使用Tesseract库识别验证
2018/03/21 Python
python getopt模块使用实例解析
2019/12/18 Python
Opencv求取连通区域重心实例
2020/06/04 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
校园学雷锋活动月总结
2014/03/09 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
班风学风建设方案
2014/05/06 职场文书
房租涨价通知
2015/04/23 职场文书
《确定位置》教学反思
2016/02/18 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
Selenium浏览器自动化如何上传文件
2022/04/06 Python
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python