149 N个数排列 其中一个数被替换 求复杂度
来源:互联网 发布:实况巅峰数据图拉姆 编辑:程序博客网 时间:2024/05/16 12:27
题目大意如下:
一排 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
- 149 N个数排列 其中一个数被替换 求复杂度
- 数组a[N],存放了N个数,其中某个数重复一次。 写一个函数,找出被重复的数字.时间复杂度必须为o(N)
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- 数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)
- (思科笔试)数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
- O(n)时间复杂度求最小的k个数和第k小的数
- 求n个数的全排列
- DFS生成n个数的排列数
- UVA11889:Benefit(已知LCM和其中一个数,求另一个数)
- n个数乘一个数
- n个数乘一个数
- [算法] 求排列组合: 从n个数中任选m个数组成一个新数
- 经典算法-给出2n+1个数,其中有2n个数出现过两次,用简便的最方法求出现一次的数
- 2N+1个数,除了其中一个数之外,其他均为两两成对,寻找这个落单的数
- 等概率、O(n)复杂度求随机排列
- 求一个数是否是另一个数的n次方幂、一个数是否是2的n次方幂
- 求一个数二进制中1的个数(优化)。求一个数是不是2的n次方
- codeforces xxx d
- HDU 2642 Stars 二维树状数组应用
- RakNet学习(26) -- Custom Memory Management
- 关于JAVA你所不知道的10件事
- UIWebView的基本使用
- 149 N个数排列 其中一个数被替换 求复杂度
- 层次聚类之AGNES算法和DIANA算法
- 马化腾内部分享:产品经理必修课
- android MediaScanner详解 ---- MediaScanner扫描得到多媒体信息
- 使用frame分割html页面的时候怎么得到大小固定的区域
- dbscan算法
- android MediaScanner详解
- Spring XML配置自动装配的Bean
- ArrayList和LinkedList