在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创建XML文档
Mar 01 Python
Python中处理时间的几种方法小结
Apr 09 Python
Python 备份程序代码实现
Mar 06 Python
Python随机读取文件实现实例
May 25 Python
matplotlib给子图添加图例的方法
Aug 03 Python
linux查找当前python解释器的位置方法
Feb 20 Python
pytorch 修改预训练model实例
Jan 18 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
python实现图片九宫格分割的示例
Apr 25 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中删除变量时unset()和null的区别分析
2011/01/27 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
vue router demo详解
2017/10/13 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
多个应用共存的Django配置方法
2018/05/30 Python
python爬取网页转换为PDF文件
2018/06/07 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
潘婷洗发水广告词
2014/03/14 职场文书
投标担保书范文
2014/04/02 职场文书
我的求职择业计划书
2014/04/04 职场文书
小组口号大全
2014/06/09 职场文书
消防工作实施方案
2014/06/09 职场文书
见习报告怎么写
2014/10/31 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP