在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 RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
python如何通过实例方法名字调用方法
Mar 21 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
Python中的heapq模块源码详析
Jan 08 Python
Python判断有效的数独算法示例
Feb 23 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Python实现对adb命令封装
Mar 06 Python
使用python创建股票的时间序列可视化分析
Mar 03 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的配置文件php.ini
2006/10/09 PHP
php win下Socket方式发邮件类
2009/08/21 PHP
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
使用PHP编写的SVN类
2013/07/18 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
Python解析xml中dom元素的方法
2015/03/12 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
Foreo国际站:Foreo International
2018/10/29 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
怎样写好自我评价呢?
2014/02/16 职场文书
小学毕业寄语大全
2014/04/03 职场文书
安全环保标语
2014/06/09 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
论文答谢词
2015/01/20 职场文书
婚前保证书范文
2015/02/28 职场文书
办公室岗位职责范本
2015/04/11 职场文书
婚宴致辞
2015/07/28 职场文书
golang import自定义包方式
2021/04/29 Golang
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js