Icoding题解 线性表 删除指定范围
题干
顺序表 删除指定范围
设计一个高效的算法,从顺序表L中删除所有值介于x和y之间(包括x和y)的所有元素(假设y>=x),要求时间复杂度为O(n),空间复杂度为O(1)。
函数原型如下:void del_x2y(SeqList *L, ElemType x, ElemType y)
相关定义如下:
1 | struct _seqlist{ |
分析
简要分析题干:
这压根就不需要分析……它比链表那道题更加简单直接应当注意的问题:
- 时间复杂度和空间复杂度的要求
- 删除大于等于x小于等于y的数字
- 对单个数组的操作
解题思路:
- 用两个index即可完成。
- 一个index一旦检测到了小于x或大于y的数字,就将其指向的值赋值给另一个index指向的位置,另一个index自增。
核心代码
1 | void del_x2y(SeqList *L, ElemType x, ElemType y) { |
完整代码
完整代码和前面带注释的版本又有不同哦,完整代码的版本的水平其实是比较差的,不过两者运用的思想其实完全一致,读者不妨看看下面的代码究竟差在哪里?
1 | void del_x2y(SeqList *L, ElemType x, ElemType y) { |