[讨论]讨论一个小算法,希望能提高点效率
有一个一维数组,值域为[0,10],如array[10]={0,0,0,2,5,0,0,4,3,0};现在的要求是,控制数组的非0元素的数量,比如要求非0元素最多为2个,那么上面这个数组的非0元素个数4就超过了2个,于是要随机选择2个非0元素赋值为0。现在的问题是怎么样的算法能够用最短的时间内解决问题。
一个简单的办法是
modify_num=0; //被修改的元素个数,在上例中应该上限为2
while(modify_num<2)
{
pos=rand(10); //随机产生一个拟修改的元素位置
if(array[pos]!=0) //只有非0元素才需要修改
{
array[pos]=0;
modify_num++;
}
}
这种算法会无谓浪费很多由于随机指定的元素已经是0而不需要修改的时间,不知道有没有更好的办法。