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的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
python3+PyQt5自定义视图详解
Apr 24 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
解决Django Haystack全文检索为空的问题
May 19 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 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/10/09 PHP
php构造函数的继承方法
2015/02/09 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP _construct()函数讲解
2019/02/03 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python中metaclass原理与用法详解
2019/06/25 Python
对Python函数设计规范详解
2019/07/19 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
python 生成器需注意的小问题
2020/09/29 Python
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
毕业求职自荐信格式是什么
2013/11/19 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
房地产项目建议书
2014/03/12 职场文书
植物生产学专业求职信
2014/08/08 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
MySQL 数据库范式化设计理论
2022/04/22 MySQL