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之hello world
May 21 Python
学习python 之编写简单乘法运算题
Feb 27 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
Python3如何使用tabulate打印数据
Sep 25 Python
十个Python自动化常用操作,即拿即用
May 10 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
ie focus bug 解决方法
2009/09/03 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
详解Vue方法与事件
2017/03/09 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
详解Python 切片语法
2019/06/10 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
EJB的几种类型
2012/08/15 面试题
施工资料员的岗位职责
2013/12/22 职场文书
学生爱国演讲稿
2014/01/14 职场文书
《分一分》教学反思
2014/04/13 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
详解Python requests模块
2021/06/21 Python
Golang 实现WebSockets
2022/04/24 Golang