在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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
python放大图片和画方格实现算法
Mar 30 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
Python Django 命名空间模式的实现
Aug 09 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
python 默认参数相关知识详解
Sep 18 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
python 实现两个npy档案合并
Jul 01 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
Elasticsearch 数据类型及管理
Apr 19 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
kmock javascript 单元测试代码
2011/02/06 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
Python实现二分法算法实例
2015/02/02 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
鱼油专家:Omegavia
2016/10/10 全球购物
Final类有什么特点
2012/04/25 面试题
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
初中女生自我鉴定
2013/12/19 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
如何写自我鉴定
2014/03/19 职场文书
我的中国梦口号
2014/06/16 职场文书
临时用工协议书范本
2014/10/29 职场文书
邀请函的格式
2015/01/30 职场文书
单位政审意见范文
2015/06/04 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
创业计划书之家教中心
2019/09/25 职场文书
PHP新手指南
2021/04/01 PHP