1057. Stack (30)
1.本题的中间三个测试点非常容易超时 2.需要采用树状数组+二分法 树状数组:能够在o(logn)的时间内进行对a[i]操作和统计a[0]+a[1]+a[2]+...a[i]的操作。 我们把a[i]记录为i的出现次数,那么统计sum=a[0]+a[1]+a[2]+...a[i],就可以知道小于等于i的元素出现的次数。而PeekMedian操作中,是求n/2或者(n+1)/2的元素,即当sum等于n/2或者(n+1)/2时,i就是我们需要输出的元素 3.利用树状数组,能够快速统计sum,利用二分法,能够快速定位i 4.后续优化:可以考虑采用一个数组实现stack的功能,int stack[N]; int stackTop=0;//既是栈顶元素在stack数组的位置,也是栈内元素的总个数,push操作:stack[++stackTop]=x, pop操作:stack[stackTop--]. //#include<string> //#include<stack> //#include<unordered_set> //#include <sstream> //#include "func.h" //#include <list> #include <iomanip> #include<unordered_map> #include<set> #include<queue>