二分法搜索与哈希表

二分法搜索与哈希表的使用

在寻找排序数组中的某一个数字的时候可以使用二分法与哈希表的方式,哈希表时间复杂度是o(1),但是空间复杂度增大了,需要把所有存入哈希表内,而二分法就比较简单了,只需要进行折半查找。

哈希表:

从头到尾遍历每个数据,存入哈希表,下表当做key,数组中的值当做value,直接搜索就能求得位置。

二分法:

比如数组M[n]中0~n-1的数据,寻找m,第一次搜索看M[(n-1)/2]与M[m]之间的大小,如果大于M[m],则到[0~(n-1)/2-1]之间寻找,此时再求两个端点位置的中间值假设是t,判断M[t]与M[m]的大小,如果小于M[m]的话,则到[t+1,(n-1)/2-1]之间寻找,........,一直确定区间,寻找中间值,总能找到我们要求得值,这样效率非常高。

代码(哈希表):

class solution
{
	public:
		int FindLocationOfK(vector<int> M,int k)
		{
			int length=M.length();
			int hash[length];
			for(int i=0;i<length;i++)
			{
				if(hash[M[i]]!=hash[M[i-1]])
				{
					hash[M[i]]=i;	
				}				
			}
			return hash[k];
		}
}

代码(二分法):

class solution
{
	public:
		int FindLocationOfK(vector<int> M,int k)
		{
			int start=M.start;
			int end=M.end;
			int mid=(start+end)/2;
			while(M[mid]!=k)
			{
				if(M[mid]>k)
				{
					start=start;
					end=mid-1;
				}
				else
				{
					start=mid+1;
					end=end;
				}
				mid=(start+end)/2;
				
			}
			return mid;
		}
		
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值