思路
分析问题
核心问题
维护一个动态序列,支持三种操作:
查询:问第I个元素的值
插入:在第I个元素前插入一个新元素
删除:删除第I个元素
数据结构选择
N和M最大只有1000,数据规模很小,直接用数组模拟即可,不需要链表或VECTOR。
具体做法
1. 查询(操作1)
直接输出 A[I],O(1)
2. 插入(操作2)
要在第I个位置前面插入V:
先把从I到末尾的元素全部往后移一位
然后在空出来的位置放入V
序列长度+1
3. 删除(操作3)
要删除第I个元素:
把从I+1到末尾的元素全部往前移一位
序列长度-1
为什么用数组就够了?
N≤1000,M≤1000
即使每次都插入,序列最长也就2000左右
数组移位的时间复杂度O(N),完全能接受
代码简单,不容易出错
复杂度
查询:O(1)
插入:O(N)
删除:O(N)
总体:O(N×M) ≈ 10⁶,完全可行
代码如下
如果觉得好,请给一个赞,谢谢