在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多进程实现进程间通信实例
Nov 24 Python
mac系统安装Python3初体验
Jan 02 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
python 发送json数据操作实例分析
Oct 15 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
python安装和pycharm环境搭建设置方法
May 27 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
OpenCV-Python实现轮廓的特征值
Jun 09 Python
Python中Selenium对Cookie的操作方法
Jul 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Python pickle模块实现对象序列化
2019/11/22 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
电脑专业个人求职信范文
2014/02/04 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
党员岗位承诺书
2014/03/25 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
关于爱国的标语
2014/06/24 职场文书
大学生学习计划书
2014/09/15 职场文书
先进党支部事迹材料
2014/12/24 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
三八妇女节主持词
2015/07/04 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
小学语文教学反思范文
2016/03/03 职场文书
python源码剖析之PyObject详解
2021/05/18 Python