"黑白逆"数组元素删除法(转)

"黑白逆"数组元素删除法(转)

最近在写程序的时候用到了删除数组元素的算法.

由于数组很大,用以前的算法,效率很低,

因此不得不想一个更好方法来解决数组元素删除算法.

我先举一个以前的数组元素删除算法的例子:

比如一个数组:int array[100] , i ;

for(i=0;i<100;i++)

array[i];

现在要删除array数组的元素, 那么最坏的情况下的时间复杂度为O(n^2);

比如要删除全部元素,时间复杂度就为O(n ^2);

最好的情况时间复杂度为:O(n );

删除一个元素的的时间复杂度为O(n );



我改进的算法思想:

顺序查找不要删除的元素,然后依次把他们放回数组中

比如数组a[10]={1,2,3......10};

我现在想删除 a[1]==2,和a[5]==6两个元素.

那就把a[0]=a[0];

a[1]=a[2];

a[2]=a[3];

a[3]=a[4];

a[4]=a[6];

a[5]=a[7];

a[6]=a[8];

a[7]=a[9];

看上面的左右数组元素, 左边是连续的,(a[0]......a[7]),而右边是除去a[1],a[5]的元素.

那么给两个指针p1,p2。P2负责查找不要删除的元素,p1负责记录当前元素移动所到的位置,

如果p2找到了不是删除的元素,那么就把p2所指的元素付给p1所指的位置上.

p1 p2

| |

V V

a[0]->a[1]->a[2]->a[3]->a[4]->a[5]->a[6]->a[7]->a[8]->a[9]
不管要删除的元素有多少个,最坏的情况下,时间复杂度都是O(n).
“黑白逆”是指要删除的元素是黑, 不删除的元素是白, 删除原本是对”黑”进行操作,而这种算法则是对不要删除的元素”白”进行操作,所以叫”黑白逆”数组元素删除算法.

杨威

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10797429/viewspace-101661/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10797429/viewspace-101661/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值