算法导论 2.3-7 python实现

本文介绍了一种运行时间为O(nlogn)的算法,用于判断整数集合S中是否存在两数之和等于给定整数x。通过归并排序和二分查找实现了这一目标,并提供了Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:描述一个运行时间为O(nlogn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素



解答就是首先使用归并排序排序数列A,之后再用二叉查找查找数列中的元素,因为 二叉查找的运行时间小于O(nlogn) 所以该方法的运行时间符合要求

下面给出实现该伪代码的python具体实现

def mergesort(mlist):
		if len(mlist)<=1:
			return mlist
		mid=len(mlist)/2
		left=mergesort(mlist[:mid])
		right=mergesort(mlist[mid:])
		return merge(left,right)

def merge(left,right):
		i,j=0,0
		result=[]
		while i<len(left) and j<len(right):
				if left[i]<right[j]:
					result.append(left[i])
					i+=1
				else:
					result.append(right[j])
					j+=1
		result+=left[i:]
		result+=right[j:]
		return result

def find(flist,value):
		left=0
		right=len(flist)-1
		while flist[0]<=value:
			if right>=left:
				mid=(left+right)/2
				if flist[mid]<value:
					left+=1
				elif flist[mid]>value:
					right-=1
				else:
					return True
			else:
				return False
		return False


if __name__=="__main__":
	mlist=[17,1,34,25,78,12,0]
	x=input(">>>input your value\n")
	result=mergesort(mlist)
	print result
	for i in xrange(len(result)):
			if find(result[i:],x-result[i]):
					print "the number exits!!!"
					break
			else:
			  		if i==len(result)-1:
			  			print "there is noting"
			  			break


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值