在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内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
使用python实现省市三级菜单效果
Jan 20 Python
理解python中生成器用法
Dec 20 Python
numpy中的高维数组转置实例
Apr 17 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
pycham查看程序执行的时间方法
Nov 29 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 Python
Python获取字典中某个key的value
Apr 13 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
多文件上载系统完整版
2006/10/09 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Golang与python线程详解及简单实例
2017/04/27 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
使用tensorflow实现线性svm
2018/09/07 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python文件和文件夹复制函数
2020/02/07 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Python修改列表值问题解决方案
2020/03/06 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
本科生求职简历的自我评价
2013/10/21 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
怒海潜将观后感
2015/06/11 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书