前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在python3中实现查找数组中最接近与某值的元素操作

在python3中实现查找数组中最接近与某值的元素操作

作者头像
砸漏
发布2020-11-05 09:47:24
6K0
发布2020-11-05 09:47:24
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

我就废话不多说了,直接上代码吧!

代码语言:javascript
复制
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.没有的话,将该元素先插入集合中,再查找该元素处于集合的某个位置。

若该元素在集合的首位,则输出该数的下一位。

若该元素在集合的末位,则输出该数的上一位。

否则,判断它左右元素的值与它的差的绝对值,输出差的绝对值较小的那个元素。若相等,则同时输出。

代码语言:javascript
复制
#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中实现查找数组中最接近与某值的元素操作就是小编分享给大家的全部内容了,希望能给大家一个参考。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档