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实现合并字典的方法
Jul 07 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
python交易记录链的实现过程详解
Jul 03 Python
python pandas 时间日期的处理实现
Jul 30 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 Python
基于python实现地址和经纬度转换
May 19 Python
Python urllib3软件包的使用说明
Nov 18 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
聊一聊python常用的编程模块
May 14 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 Python
python绘制云雨图raincloud plot
Aug 05 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程序实现支持页面后退的两种方法
2008/06/30 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
关于递归运算的顺序测试代码
2011/11/30 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
javascript中clone对象详解
2014/12/03 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python将一个Excel拆分为多个Excel
2018/11/07 Python
详解django自定义中间件处理
2018/11/21 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
python 实现单例模式的5种方法
2020/09/23 Python
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
英语专业毕业生自荐信范文
2013/12/31 职场文书
给儿子的表扬信
2014/01/15 职场文书
一夜的工作教学反思
2014/02/08 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
宣传委员竞选稿
2015/11/19 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP
Nginx HTTP跳转至HTTPS
2022/05/15 Servers