在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 socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
Python中特殊函数集锦
Jul 27 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
3分钟学会一个Python小技巧
Nov 23 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Django REST framework 视图和路由详解
Jul 19 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
python3正则模块re的使用方法详解
Feb 11 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
什么是Python包的循环导入
Sep 08 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学习教程之第2天
2008/06/15 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python实现简单http服务器
2018/04/12 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python gevent协程切换实现详解
2020/09/14 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
法律专业求职信
2014/05/24 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android