在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 字符串中的字符倒转
Sep 06 Python
Python获取脚本所在目录的正确方法
Apr 15 Python
python判断windows系统是32位还是64位的方法
May 11 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
PyGame贪吃蛇的实现代码示例
Nov 21 Python
BP神经网络原理及Python实现代码
Dec 18 Python
对Python函数设计规范详解
Jul 19 Python
在pycharm中显示python画的图方法
Aug 31 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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数组合并array_merge()函数使用注意事项
2014/06/19 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
python列表推导式入门学习解析
2019/12/02 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
工作会议主持词
2014/03/17 职场文书
政府个人对照检查材料
2014/08/28 职场文书
班主任工作实习计划
2015/01/16 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
2015年药店工作总结
2015/04/20 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python