溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3中怎么實現(xiàn)查找數(shù)組中最接近與某值的元素操作

發(fā)布時間:2021-05-24 11:22:08 來源:億速云 閱讀:150 作者:小新 欄目:開發(fā)技術

小編給大家分享一下python3中怎么實現(xiàn)查找數(shù)組中最接近與某值的元素操作,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

代碼如下

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))

補充拓展:查詢集合中最接近某個數(shù)的數(shù)

查詢集合中最接近某個數(shù)的數(shù)

/*
★實驗任務
給你一個集合,一開始是個空集,有如下兩種操作:

向集合中插入一個元素。
詢問集合中最接近某個數(shù)的數(shù)是多少。
★數(shù)據(jù)輸入
輸入第一行為一個正整數(shù) N,表示共有 N 個操作。
接下來 N 行,每行一個操作。
對于第一個操作,輸入格式為 1 x,表示往集合里插入一個值為 x 的元素。
對于第二個操作,輸入格式為 2 x,表示詢問集合中最接近 x 的元素是什么。
1<=N<=100000,1<=x<=1000000000。

★數(shù)據(jù)輸出
對于所有的第二個操作,輸出一個或者兩個整數(shù),表示最接近 x 的元素,有
兩個數(shù)的情況,按照升序輸出,并用一個空格隔開。
如果集合為空,輸出一行“Empty!”
數(shù)據(jù)保證插入的元素兩兩不同。

輸入示例 輸出示例

5 Empty!
2 1 2
1 2 2 4
2 3
1 4
2 3
*/

解題思路

一、采用C++ 中map容器,因為它可以實時對輸入的元素進行排序。(map的使用可自行百度)

二、當集合為空時,輸出“Empty!”;當集合中只有一個元素時,直接輸出該元素。

三、下面重點看一般的情況。

1.先查找集合中是否有查詢的元素,有則輸出該元素

2.沒有的話,將該元素先插入集合中,再查找該元素處于集合的某個位置。

若該元素在集合的首位,則輸出該數(shù)的下一位。

若該元素在集合的末位,則輸出該數(shù)的上一位。

否則,判斷它左右元素的值與它的差的絕對值,輸出差的絕對值較小的那個元素。若相等,則同時輸出。

#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的左右兩側(cè) 
						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中怎么實現(xiàn)查找數(shù)組中最接近與某值的元素操作”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI