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

作者:笔筒188 时间:2023-10-30 22:35:19 

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


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;
}

来源:https://blog.csdn.net/GIS_BT/article/details/92004228

标签:python3,查找,数组,某值
0
投稿

猜你喜欢

  • 浅谈常用Java数据库连接池(小结)

    2024-01-18 06:50:25
  • 详解如何用Golang处理每分钟100万个请求

    2023-10-12 20:30:30
  • python学生信息管理系统(完整版)

    2023-06-25 05:16:31
  • NopCommerce架构分析(一)Autofac依赖注入类生成容器

    2023-07-11 21:20:27
  • Python利用Nagios增加微信报警通知的功能

    2021-07-15 13:48:46
  • ASP检测服务器相关的一些代码

    2008-01-25 19:20:00
  • Python如何把不同类型数据的json序列化

    2021-06-01 22:52:16
  • PHP模板引擎Smarty中变量的使用方法示例

    2023-11-14 23:32:25
  • MySQL里面的子查询实例

    2024-01-14 20:43:17
  • mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法

    2021-10-19 18:40:40
  • 在Python的Django框架上部署ORM库的教程

    2021-04-08 02:20:47
  • Python实现PS滤镜的万花筒效果示例

    2023-11-15 10:17:25
  • 用 AjaxTags 简化 Ajax 开发

    2007-11-27 00:00:00
  • pytorch中交叉熵损失函数的使用小细节

    2021-08-30 05:02:21
  • 深入理解MySQL重做日志 redo log

    2024-01-13 22:25:36
  • Python-jenkins 获取job构建信息方式

    2022-01-11 19:06:17
  • mysql数据库之索引详细介绍

    2024-01-19 09:06:08
  • Pyside2中嵌入Matplotlib的绘图的实现

    2021-09-15 22:34:03
  • 2022最新版MySQL 8.0.30 安装及配置教程(小白入门)

    2024-01-28 16:49:49
  • 交互设计杂七杂八

    2010-09-25 18:41:00
  • asp之家 网络编程 m.aspxhome.com