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 client使用http post 到server端的代码
Feb 10 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
利用Python如何生成便签图片详解
Jul 09 Python
django+echart绘制曲线图的方法示例
Nov 26 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
python分别打包出32位和64位应用程序
Feb 18 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
如何解决python多种版本冲突问题
Oct 13 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 读取文件乱码问题
2010/02/20 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
python3中str(字符串)的使用教程
2017/03/23 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
北大青鸟学生求职信
2013/09/24 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
幼师自荐信范文
2015/03/06 职场文书
python实现简单的三子棋游戏
2022/04/28 Python