给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
2013-08-21 16:30
344 查看
参考:http://blog.csdn.net/yysdsyl/article/details/5419149
题目:
给定数组Arr
,对于其中的每个元素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
思路:
借助于栈来实现,从后向前遍历数组,while栈顶元素小于当前遍历的数组元素,则更新dst,并pop。
参见下面代码
题目:
给定数组Arr
,对于其中的每个元素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
思路:
借助于栈来实现,从后向前遍历数组,while栈顶元素小于当前遍历的数组元素,则更新dst,并pop。
参见下面代码
/* 题目: 给定数组Arr ,对于其中的每个元素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 思路: 借助于栈来实现,从后向前遍历数组,while栈顶元素小于当前遍历的数组元素,则更新dst,并pop。 */ #include <iostream> #include <stack> using namespace std; void sulotion(const int* src,int* dst,const int nSize) { stack<int> temp; for ( int i=nSize-1 ; i>=0 ; ){ if ( !temp.empty() && src[i]>src[temp.top()] ){ dst[temp.top()]=i; temp.pop(); } else { temp.push(i); --i; } } while (!temp.empty()){ dst[temp.top()]=-1; temp.pop(); } } int main() { int src[] = {2,9, 5, 2, 4, 7}; int dst[6]; sulotion(src,dst,6); for ( int i=0 ; i<6 ; ++i ){ cout<<dst[i]<<" "; } return 0; }
相关文章推荐
- 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- 面试题精选(85):给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素
- leetcode-java.T015_3Sum---给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组
- 有20个数组,每个数组有500个元素,升序排列,现在在这20*500个数中找出排名前500的数。求时间复杂度?
- 这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。
- 给定整型数组,其中每个元素表示木板的高度,木板的宽度都相同,求这些木板拼出的最大矩形的面积。并分析时间复杂度。
- 给定整型数组,其中每个元素表示木板的高度,木板的宽度都相同,求这些木板拼出的最大矩形的面积。并分析时间复杂度。
- 在给定的数组中找出两个元素和为给定值的所有元素对
- 给定一个数组arr和一个目标数targrt,删除所有目标值元素,并返回新长度
- java__给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。
- 【模式匹配】— 求比数组所有比自身元素小且在它之前离它最近的元素位置,时间复杂度O(n).
- lastIndexOf() 找出指定元素出现的所有位置(返回的是下标数组)---lastIndexOf() 这个方法是倒叙查找,正序的是indexOf()
- 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
- 定义一个100长度的整型数组,使用rand函数生产随机数对每个元素进行赋值,顺序遍历该数组,输出所有值大于50的数
- 1.找出数组元素item在给定数组arr中的位置
- 在数组 arr 中,查找值与 item 相等的元素出现的所有位置
- 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。
- indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找
- 将数组中所有小于或等于0的元素都放在数组前面,大于0的元素放在数组后面。要求时间复杂度为o(n)