149 N个数排列 其中一个数被替换 求复杂度

49、08 百度校园招聘的一道笔试题 
题目大意如下:
一排 N(最大 1M)个正整数+1 递增,乱序排列,第一个不是最小的,把它换成-1,

最小数为a且未知求第一个被-1 替换掉的数原来的值,并分析算法复杂度。


解答:
设这一排数是A1、A2、A3、…、AN,这N个数分别是: a, a+1, a+2, …, a+n
  被替换掉的数为X,则X变成了-1。 
  SumA = A1+A2+A3+…+AN(其中有个-1)
  SumB =a+(a+1)+…+(a+n)
  则 SumB-SumA=X-(-1)=X + 1 其余抵消 

处理溢出情况:1M=10^6  2^20= 1048576
  和的最大范围a + … + 2^20 ≈ 1+…+ 2^20 ≈ (1+2^20)* 2^20/2 =2^40。
使用4字节的int会溢出,64位的long long可以搞定 

使用辅助数组data,数组的元素是Ai-(a+i-1)。则data的所有元素之和恰好是SumB – SumA。
现在要说明的是:对data的所有元素求和不会溢出。
  
最好情况下,这一排数{A1、A2、A3、…、AN}的顺序基本和{ a, a+1, a+2, …, a+n }相同,
这样除了第一个元素,其余元素对应相减都为0,因此不会溢出。
最坏情况下,{A1、A2、A3、…、AN}递减排列,{ a, a+1, a+2, …, a+n }递增排列。
此时,data的前N/2个元素为正,后N/2个元素为负。相加求和时,只要前N/2个元素的和不溢出,则结果不溢出。
这时,前N/2个元素分别为:(a+n)-(a), (a+n-1)-(a+1), (a+n-2)-(a+2),…2, 0
则,前N/2个元素的和:(((a+n)-(a))*n/2)/2 = n^2/4≈(2^20)^2/4≈ 2^40


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值