找出数组中下一个大数
给出一整数数组,找出比当前元素大的下一个数。 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的数组可以新开辟一个。 想要处理更多的数,可以将数组和元素个数作为参数。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |