在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+selenium+autoit实现文件上传功能
Aug 23 Python
Python程序运行原理图文解析
Feb 10 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
python 列表推导式使用详解
Aug 29 Python
Python文件读写w+和r+区别解析
Mar 26 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
python脚本替换指定行实现步骤
2017/07/11 Python
Python reduce函数作用及实例解析
2020/05/08 Python
中国旅游网站:途牛旅游网
2019/09/29 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
转党组织关系介绍信
2014/01/08 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
个性与发展自我评价
2015/03/06 职场文书
小鞋子观后感
2015/06/05 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
java实现面板之间切换功能
2022/06/10 Java/Android