当前位置: 首页 > 面试题库 >

n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?

叶声
2023-03-14
本文向大家介绍n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?相关面试题,主要包含被问及n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?时的应答技巧和注意事项,需要的朋友参考一下
vector<int> findMax(vector<int>num)
{
if(num.size()==0)return num;
vector<int>res(num.size());
int i=0;
stack<int>s;
while(i<num.size())
{
if(s.empty()||num[s.top()]>=num[i])
{
s.push(i++);
}
else
{
res[s.top()]=num[i];
s.pop();
}
}
while(!s.empty())
{
res[s.top()]=INT_MAX;
s.pop();
}
for(int i=0; i<res.size(); i++)
cout<<res[i]<<endl;
return res;
}

 

 类似资料:
  • 如果您有长度的排序数组,请查找其中最小的元素。这里有一些潜在的解决方案,有些涉及最小堆或二进制搜索,但我想知道使用QuickSelect的时间复杂度是多少。如果我们简单地将每个数组连接在一起,并在组合数组上使用quickselect。 Quickselect在一般情况下以线性时间运行,但是数组的组合确实会扩展搜索空间,但它比使用合并策略更有效,因为如果选择了好的枢轴,Quickselect必然允许

  • 我有两个关于确定2个算法的时间复杂度的问题。 用比较法从一组n个不同的数字中确定最小的3个数字。 这3个元素可以使用O(log2n)比较来确定。 O(log2n)不够,但是可以使用n+O(1)比较来确定它们。 n+O(1)不够,但是可以使用n+O(logn)比较来确定它们。 n+O(logn)不够,但是可以使用O(n)比较来确定它们。 以上都没有。 这里,我想到的方法是取3个变量(例如:min1、

  • 问题内容: 查找整数数组中的第一个重复元素。 例如: 问题答案: 简单的解决方案是使用两个循环。外循环将遍历循环,内循环将检查元素是否重复,但此解决方案的时间复杂度为 o(n^2)。 另一种解决方案是创建另一个数组并对其进行排序。从原始数组中选取元素并使用二进制搜索在排序数组中查找元素,但此解决方案的时间复杂度为 o(n^logn)。 我们能做得更好吗? 是的,我们可以从右到左迭代并使用HashS

  • 返回数组中的每个第 n 个元素。 使用 Array.filter() 创建一个包含给定数组的每个第 n 个元素的新数组。 const everyNth = (arr, nth) => arr.filter((e, i) => i % nth === nth - 1); everyNth([1, 2, 3, 4, 5, 6], 2); // [ 2, 4, 6 ]

  • 本文向大家介绍从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度相关面试题,主要包含被问及从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度?相关面试题,主要包含被问及手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: JAVA版本:   C/C++版本: