在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操作Redis之设置key的过期时间实例代码
Jan 25 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
python实现聚类算法原理
Feb 12 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
使用Python构造hive insert语句说明
Jun 06 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
python 爬取B站原视频的实例代码
Sep 09 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 socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
Python 文件和输入输出小结
2013/10/09 Python
web.py中调用文件夹内模板的方法
2014/08/26 Python
Python入门篇之字符串
2014/10/17 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
点球小游戏python脚本
2018/05/22 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
python  logging日志打印过程解析
2019/10/22 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
吨的认识教学反思
2014/04/27 职场文书
高三语文复习计划
2015/01/19 职场文书
义卖募捐活动总结
2015/05/09 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记