树状数组。
模板题,每次查询小于instructions[i]的元素或者大于等于instructions[i]的复杂度是logn级别,将instructions[i]插入到数组中也是logn级别。
class Solution {
public:
int mod=1e9+7;
int tr[100010];
int n=100005;
int lowbit(int x){
return x&-x;
}
void add(int u,int k){
for(int i=u;i<=n;i+=lowbit(i)) tr[i]+=k;
}
int query(int u){
int res=0;
for(int i=u;i;i-=lowbit(i)) res+=tr[i];
return res;
}
int createSortedArray(vector<int>& instructions) {
int ans=0;
for(auto c:instructions){
ans=(ans+min(query(c-1),query(n)-query(c))%mod+mod)%mod;
add(c,1);
}
return ans;
}
};
时间复杂度:O(nlogn)。
空间复杂度:O(n)。

本文介绍了一种高效的数据结构——树状数组,通过该结构可以实现快速查询和更新操作。适用于解决涉及大量元素查询和更新的问题,如创建有序数组等。文章提供了一个具体的实现案例,并分析了其时间复杂度为 O(nlogn) 和空间复杂度为 O(n)。
289

被折叠的 条评论
为什么被折叠?



