找出数组中下一个大数
|
给出一整数数组,找出比当前元素大的下一个数。 Array on integer is given Out: 2->5 5->6 3->4 4->6 6->-1 //not possible 1-> -1 //not possible 算法时间和空间复杂度都为O(n) 用栈来维护数组的下标。 O(n) time and O(n) space algorithm int a[6] = {2,1};
for (int i = 0;i < 6; i++)
{
cout << a[i] << endl;
}
cout << endl;
vector<int> nNum;
nNum.push_back(0);
//遍历数组中的元素
for(int i = 1; i< 6; i++)
{
//当此元素大于栈顶下标表示代表的元素时 表示此元素是下一个大数
while (nNum.size() && a[i] > a[nNum.back()])
{
//栈中的元素下标出栈,同时依据此下标给数组中的元素赋值,直到栈为空或者栈顶元素下标代表的元素大于a[i]
a[nNum.back()] = a[i];
nNum.pop_back();
}
nNum.push_back(i);
}
//给最后找不到next bigger number 的数赋值为-1
while (nNum.size())
{
a[nNum.back()] = -1;
nNum.pop_back();
}
for (int i = 0;i < 6; i++)
{
cout << a[i] << endl;
}
这里用来存储next bigger number的数组可以新开辟一个。 想要处理更多的数,可以将数组和元素个数作为参数。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
