在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 Flask-web表单使用详解
Nov 18 Python
python列表的增删改查实例代码
Jan 30 Python
对命令行模式与python交互模式介绍
May 12 Python
python中字符串的操作方法大全
Jun 03 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
Python多进程fork()函数详解
Feb 22 Python
python制作抖音代码舞
Apr 07 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
PYcharm 激活方法(推荐)
Mar 23 Python
python实现图片素描效果
Sep 26 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
Python实现抖音热搜定时爬取功能
Mar 16 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
python入门教程之识别验证码
2017/03/04 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python实现注册登录系统
2017/08/08 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
大韩航空官方网站:Korean Air
2017/10/25 全球购物
教师个人教学总结
2015/02/11 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python