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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
Python 26进制计算实现方法
May 28 Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
Python socket模块方法实现详解
Nov 05 Python
python可迭代对象去重实例
May 15 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
Pytorch中的数据集划分&正则化方法
May 27 Python
关于的python五子棋的算法
May 02 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 咖啡文化
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php中stdClass的用法分析
2015/02/27 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Python实现井字棋小游戏
2020/03/09 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
入党积极分子自我鉴定范文
2014/03/25 职场文书
质量标语大全
2014/06/12 职场文书
机械工程师岗位职责
2014/06/16 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
感谢信格式范文
2015/01/22 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书