在python3中实现查找数组中最接近与某值的元素操作


Posted in Python onFebruary 29, 2020

我就废话不多说了,直接上代码吧!

import datetime
 
def find_close(arr, e):
 start_time = datetime.datetime.now()
 
 size = len(arr)
 idx = 0
 val = abs(e - arr[idx])
 
 for i in range(1, size):
  val1 = abs(e - arr[i])
  if val1 < val:
   idx = i
   val = val1
 
 use_time = datetime.datetime.now() - start_time
 
 return arr[idx], use_time.seconds * 1000 + use_time.microseconds / 1000
 
def find_close_fast(arr, e):
 start_time = datetime.datetime.now()
  
 low = 0
 high = len(arr) - 1
 idx = -1
 
 while low <= high:
  mid = int((low + high) / 2)
  if e == arr[mid] or mid == low:
   idx = mid
   break
  elif e > arr[mid]:
   low = mid
  elif e < arr[mid]:
   high = mid
 
 if idx + 1 < len(arr) and abs(e - arr[idx]) > abs(e - arr[idx + 1]):
  idx += 1
  
 use_time = datetime.datetime.now() - start_time
 
 return arr[idx], use_time.seconds * 1000 + use_time.microseconds / 1000
 
if __name__ == "__main__":
 arr = []
 
 f = open("1Mints.txt")
 for line in f:
  arr.append(int(line))
 f.close()
 
 arr.sort()
 
 while 1:
  e = int(input("input a number:"))
  print("find_close ", find_close(arr, e))
  print ("find_close_fast ", find_close_fast(arr, e))

补充拓展:查询集合中最接近某个数的数

查询集合中最接近某个数的数

/*
★实验任务
给你一个集合,一开始是个空集,有如下两种操作:

向集合中插入一个元素。
询问集合中最接近某个数的数是多少。
★数据输入
输入第一行为一个正整数 N,表示共有 N 个操作。
接下来 N 行,每行一个操作。
对于第一个操作,输入格式为 1 x,表示往集合里插入一个值为 x 的元素。
对于第二个操作,输入格式为 2 x,表示询问集合中最接近 x 的元素是什么。
1<=N<=100000,1<=x<=1000000000。

★数据输出
对于所有的第二个操作,输出一个或者两个整数,表示最接近 x 的元素,有
两个数的情况,按照升序输出,并用一个空格隔开。
如果集合为空,输出一行“Empty!”
数据保证插入的元素两两不同。

输入示例 输出示例

5 Empty!
2 1 2
1 2 2 4
2 3
1 4
2 3
*/

解题思路

一、采用C++ 中map容器,因为它可以实时对输入的元素进行排序。(map的使用可自行百度)

二、当集合为空时,输出“Empty!”;当集合中只有一个元素时,直接输出该元素。

三、下面重点看一般的情况。

1.先查找集合中是否有查询的元素,有则输出该元素

2.没有的话,将该元素先插入集合中,再查找该元素处于集合的某个位置。

若该元素在集合的首位,则输出该数的下一位。

若该元素在集合的末位,则输出该数的上一位。

否则,判断它左右元素的值与它的差的绝对值,输出差的绝对值较小的那个元素。若相等,则同时输出。

#include <iostream>
#include <map>
#include <cmath> 
using namespace std;
map <long long ,int> a;
int main()
{
	a.clear() ;
	int N,t;
	long long int x;
	cin >> N;
	while(N--)
	{
		cin >> t >> x;
		if(t==1)
			a[x]=1;
		else
		{
			if(a.empty() )//判断集合是否为空 
				cout << "Empty!\n" ;
			else
			{
				if(a.size() == 1 )//若只有一个元素,则直接输出 
					cout << a.begin()->first << endl;
				else
				{
					map <long long ,int>::iterator it,m,n;
					it=a.find(x);
					if(it!=a.end() )
					{
						cout << x <<endl;
						continue;
					}
					a[x]=1;
					it=a.find(x);
					if(it == a.begin() )
					{
						it++;
						cout << it -> first << endl;
					} 
					else if(it == a.end() )
					{
						it--;
						cout << it -> first << endl; 
					}
					else
					{
						m=--it;//m和n分别指向it的左右两侧 
						it++;
						n=++it;
						if(abs(m -> first - x) > abs(n -> first - x))
							cout << n -> first << endl;
						else if(abs(m -> first - x) == abs(n -> first - x))	
							cout << m -> first << " " << n -> first << endl;
						else
							cout << m -> first << endl;		
					}
					a.erase(a.find(x) ); 	
				}	 
			}	
		}	
	}
	return 0;
}

以上这篇在python3中实现查找数组中最接近与某值的元素操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python中的fabs()方法的使用
May 14 Python
python使用opencv进行人脸识别
Apr 07 Python
requests和lxml实现爬虫的方法
Jun 11 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
python装饰器深入学习
Apr 06 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
pyqt5实现登录界面的模板
May 30 Python
django 做 migrate 时 表已存在的处理方法
Aug 31 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 Python
Python requests库参数提交的注意事项总结
Mar 29 Python
python pandas移动窗口函数rolling的用法
Feb 29 #Python
基于Python fminunc 的替代方法
Feb 29 #Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 #Python
使用python求解二次规划的问题
Feb 29 #Python
Python龙贝格法求积分实例
Feb 29 #Python
python计算导数并绘图的实例
Feb 29 #Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 #Python
You might like
php中jpgraph类库的使用介绍
2013/08/08 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
表格 隔行换色升级版
2009/11/07 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python分布式环境下的限流器的示例
2017/10/26 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
汽车维修专业个人求职信范文
2014/01/01 职场文书
市场安全管理制度
2014/01/26 职场文书
追悼会子女答谢词
2014/01/28 职场文书
小学信息技术教学反思
2014/02/10 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
物理教学随笔感言
2014/02/22 职场文书
人事专员的岗位职责
2014/03/01 职场文书
人工作失职检讨书
2015/05/05 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL