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;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章