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 02 Python
使用python绘制常用的图表
Aug 27 Python
AI人工智能 Python实现人机对话
Nov 13 Python
使用turtle绘制五角星、分形树
Oct 06 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
python自动点赞功能的实现思路
Feb 26 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
Pytorch 如何实现LSTM时间序列预测
May 17 Python
分享几种python 变量合并方法
Mar 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
php设计模式 Observer(观察者模式)
2011/06/26 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
php导入模块文件分享
2015/03/17 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
prototype class详解
2006/09/07 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
js 字符串操作函数
2009/07/25 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
js document.write()使用介绍
2014/02/21 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
财务管理专业推荐信
2013/11/19 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
投资意向书范本
2014/04/01 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
高中英语教学反思范文
2016/03/02 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL