给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
来源:互联网 发布:2008奥运会开幕 知乎 编辑:程序博客网 时间:2024/05/18 17:01
题目: http://blog.csdn.net/yysdsyl/archive/2010/03/26/5419149.aspx
给定数组Arr[n],对于其中的每个元素Arr[i](0=<i<n),在Arr[0...i-1]中找到元素Arr[k],Arr[k]满足Arr[k]>Arr[i],并且i-k值最小(即最靠近)。
要求O(n)时间内找出Arr中所有元素对应的Arr[k]的位置。
ex,
src[]: 9, 5, 2, 4, 7
dst[]: -1,0, 1, 1, 0
思路跟原博主一样,但要简洁点,并试图证明其正确性。
正确性证明:
line 17-23具有下面的循环不变性:
(1)Idx[i:0]维护了A[j+1:n-1]间D值尚未计算的元素的索引,且元素值是非递减的。
起始:i == -1, j + 1 == n, Idx[i:0], A[j+1:n-1]为空,平凡情况,成立。
维护:1)如果A[j] > A[Idx[i]],因此A[Idx[i]]的D值就是由A[j]得到,根据假设(1)A[Idx[i:0]]是非递减的,因此循环往前直到遇到或者某一个元素大于等于A[j],或者A[Idx[i:0]]为空,这两种情况下A[Idx[i:0]]为这次循环前的子集,且计算了D值的元素已经被删除,因此A[Idx[i:0]]满足1)的性质。这之后把A[j]加入,由于A[j] <= A[Idx[i]],且A[j]的D值没有计算,因此(1)成立。
2)否则A[j] <= A[Idx[i]],又A[j]的D值没有计算,把A[j]加入,(1)仍然成立。
结束:结束时j = -1,A中所有元素考察完毕,A[Idx[i:0]]中元素D值没有计算且为非递减序的,显然其D值为-1,这由初始化获得。因此所以元素的D值都得到计算。
时间复杂度:算法共操作了三个n个元素的数组,A,Idx,D,A中元素仅考察一遍,时间为O(n),A的每个元素索引进入Idx最多一次,时间O(n),D最到访问两遍,时间O(n),因此总的时间O(n)。
- 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 面试题精选(85):给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 主元素问题(判断数组是否出现主元素,O(n)时间内找出主元素,主元素出现次数)
- 在O(n)时间内找出最小的k个元素
- 编写程序,在O(n)时间内从数组x[0..n-1]中找出第k个最小的元素?
- 找出元素 item 在给定数组 arr 中的位置
- 计算给定数组 arr 中所有元素的总和
- 从有n个元素的数组中找出出现次数大于n/3次的元素
- 给定一个整数数组,1≤a [i]≤n(n =数组的大小),一些元素出现两次,其他出现一次 查找在该数组中出现两次的所有元素
- 在给定的数组中找出两个元素和为给定值的所有元素对
- 在给定的数组中找出两个元素和为给定值的所有元素对
- 给定一个整型数组,求数组元素大于等于所有元素平均值的元素个数
- Leetcode238. O(n)并且不能使用除法计算数组每个元素除了它本身的所有元素的积
- 算法之找出数组中出现次数大于n/m的元素
- 找出数组中重复的元素,或者丢失的元素,前提,数组长度N,元素为1到N
- N个元素的数组中找出出现多于N/2次的数(主元素)
- 多态(笔记)
- sysconf、pathconf和fpathconf
- 第三次IT浪潮将使白领收入成倍不均-信息革命
- 相联存储器组成和检索
- C++文件读写函数介绍
- 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 今天是2010年9月11日
- Spring技术内幕——深入解析Spring架构与设计原理(二)AOP
- H.323协议模型
- Windows编程那些事----内存管理方法之三【内存堆栈】
- org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the sessio
- 节约编译时间的利器,多线程应用的典范 - Incredi build
- 让VC不再编译帮助文件的方法
- 关于SEO的心得