1.3-1.5 Hash的應用、排版題、查找

1.3-1.5 Hash的應用、排版題、查找

1.3 Hash的應用

何時使用Hash:
一般情況下,我們是想不到使用Hash的。讀完題目,設計算法後,分析設計算法的時間、空間複雜度。此時,如果時間複雜度不能被接受,則考慮使用Hash。

如下題:要求按順序輸出。數據量大小爲1000000,即使當我們採用時間複雜度爲O(nlogn)的快速排序時,數量級也會超過千萬級,因此很難滿足1s的時間限制。

所以我們採用空間換時間的方法。

採用[0,1000000]的數組存儲[-500000,500000]的整數,這樣從頭至尾遍歷數組,即可得出結果。時間複雜度爲百萬級,空間複雜度爲也符合要求。

時間限制:1s,內存限制:128MB,特殊判題:否
在這裏插入圖片描述

1.4 排版題

這類題型對輸出格式要求很嚴格,有兩種輸出方式:

  1. 邊排版邊輸出
  2. 先排版後輸出。一般將排版結果存放在數組中,最後按數組輸出。

1.5 查找

1)查找所涉及的基本要素:查找空間、查找目標、查找方法。

2)按數組順序依次查找、二分查找。需要優化時間複雜度時,考慮二分查找。注意在代碼第8、9行,遞歸調用時,添加return關鍵字。

3)c++中的字符串運算符已經優化的非常好了,==、>、< 可以直接使用

int halfFind(int *a,int low,int high,int key){
	if(low == high || high - low ==1){
		if(a[low]==key) return low;
		else if(a[high]==key)return high;
		else return -1;
	}else{
		int mid = (low+high)/2,pos;
		if(a[mid] > key) return halfFind(a,low,mid,key);
		else if(a[mid] < key) return halfFind(a,mid,high,key);
		else return mid;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章