简单动脑子,想了个n^2的,结果超时了
然后请教舍友,桥神给了我个o(n)的算法
如下
j对数组进行扫描,i对数组进行覆盖,找到符合要求的元素直接在原数组上进行覆盖即可,只需扫描一次数组。
List Delete( List L, ElementType minD, ElementType maxD ){ int i,j; for(i=-1,j=0;j<=L->Last;j++) if(L->Data[j]<=minD||L->Data[j]>=maxD) L->Data[++i]=L->Data[j]; L->Last=i; return L; }
我倒是想了个类似的,也是o(n),不过比这麻烦些
还是对数组扫描,找到一个不合适的数,从这开始的数就往前挪一个,找到两个,从第二个起开始挪两个,依次类推,也只需要扫描一次数组