欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年02月29日 16:07:05   作者:筆筒188  
今天小編就為大家分享一篇在python3中實(shí)現(xiàn)查找數(shù)組中最接近與某值的元素操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

我就廢話不多說(shuō)了,直接上代碼吧!

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

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

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

/*
★實(shí)驗(yàn)任務(wù)
給你一個(gè)集合,一開始是個(gè)空集,有如下兩種操作:

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

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

輸入示例 輸出示例

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

解題思路

一、采用C++ 中map容器,因?yàn)樗梢詫?shí)時(shí)對(duì)輸入的元素進(jìn)行排序。(map的使用可自行百度)

二、當(dāng)集合為空時(shí),輸出“Empty!”;當(dāng)集合中只有一個(gè)元素時(shí),直接輸出該元素。

三、下面重點(diǎn)看一般的情況。

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

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

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

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

否則,判斷它左右元素的值與它的差的絕對(duì)值,輸出差的絕對(duì)值較小的那個(gè)元素。若相等,則同時(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 )//若只有一個(gè)元素,則直接輸出 
					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中實(shí)現(xiàn)查找數(shù)組中最接近與某值的元素操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python用Pillow(PIL)進(jìn)行簡(jiǎn)單的圖像操作方法

    Python用Pillow(PIL)進(jìn)行簡(jiǎn)單的圖像操作方法

    下面小編就為大家?guī)?lái)一篇Python用Pillow(PIL)進(jìn)行簡(jiǎn)單的圖像操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題

    Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 教你使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易版Web服務(wù)器

    教你使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易版Web服務(wù)器

    這篇文章主要介紹了教你使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易版Web服務(wù)器,本篇文章將通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的Web服務(wù)器,幫助讀者理解Python網(wǎng)絡(luò)編程的基本概念和技巧,需要的朋友可以參考下
    2023-04-04
  • Python設(shè)計(jì)模式之單例模式實(shí)例

    Python設(shè)計(jì)模式之單例模式實(shí)例

    這篇文章主要介紹了設(shè)計(jì)模式中的單例模式Python實(shí)例,需要的朋友可以參考下
    2014-04-04
  • Python實(shí)現(xiàn)壓縮pdf文件大小

    Python實(shí)現(xiàn)壓縮pdf文件大小

    工作中常需要壓縮數(shù)據(jù)文件大小,壓縮PDF文件是一種減少PDF文件大小的方法,這樣可以使文件更易于傳輸和存儲(chǔ),本文將使用Python實(shí)現(xiàn)這一功能,需要的可以參考下
    2024-02-02
  • Python獲取B站粉絲數(shù)的示例代碼

    Python獲取B站粉絲數(shù)的示例代碼

    這篇文章主要介紹了Python獲取B站粉絲數(shù)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Python閉包執(zhí)行時(shí)值的傳遞方式實(shí)例分析

    Python閉包執(zhí)行時(shí)值的傳遞方式實(shí)例分析

    這篇文章主要介紹了Python閉包執(zhí)行時(shí)值的傳遞方式,結(jié)合實(shí)例形式分析了Python閉包執(zhí)行時(shí)的傳值原理與實(shí)現(xiàn)方式,代碼中包含了較為詳盡的注釋便于理解,需要的朋友可以參考下
    2018-06-06
  • python sklearn中tsne算法降維結(jié)果不一致問(wèn)題的解決方法

    python sklearn中tsne算法降維結(jié)果不一致問(wèn)題的解決方法

    最近在做一個(gè)文本聚類的分析,在對(duì)文本數(shù)據(jù)embedding后,想著看下數(shù)據(jù)的分布,于是用sklearn的TSNE算法來(lái)降維embedding后的數(shù)據(jù)結(jié)果,當(dāng)在多次執(zhí)行后,竟發(fā)現(xiàn)TSNE的結(jié)果竟然變了,而且每次都不一樣,所以本文就給大家講講如何解決sklearn中tsne算法降維結(jié)果不一致的問(wèn)題
    2023-10-10
  • opencv中圖像疊加/圖像融合/按位操作的實(shí)現(xiàn)

    opencv中圖像疊加/圖像融合/按位操作的實(shí)現(xiàn)

    這篇文章主要介紹了opencv中圖像疊加/圖像融合/按位操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python內(nèi)置函數(shù)anext的具體使用

    python內(nèi)置函數(shù)anext的具體使用

    本文主要介紹了python內(nèi)置函數(shù)anext的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論