在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 正则表达式 概述及常用字符
May 04 Python
Python计算三维矢量幅度的方法
Jun 15 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python数据结构之链表的实例讲解
Jul 25 Python
python中的break、continue、exit()、pass全面解析
Aug 05 Python
python中requests库session对象的妙用详解
Oct 30 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
Python基础之pandas数据合并
Apr 27 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
2006/12/14 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
python 第三方库的安装及pip的使用详解
2017/05/11 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
初学者学习Python好还是Java好
2020/05/26 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
C#面试常见问题
2013/02/25 面试题
护士自我鉴定怎么写
2014/02/07 职场文书
新闻传播专业求职信
2014/07/22 职场文书
改革共识倡议书
2014/08/29 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
红高粱观后感
2015/06/10 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL