-6

我需要数字排列算法或javascript代码来处理以下情况

input :  [0,0,1,1,3,3,5,5,7,8,8,8,10]

output : [0,0,1,1,2,2,3,3,4,5,5,5,6]

谢谢我尝试以下片段

var array=[];
array[0]=0;
array[1]=0;
array[2]=2;
array[3]=2;
array[4]=5;
array[5]=5;
array[6]=6;

$.each(array,function(i,val){  
   if(i==0){
     prev=eval(val);
   }else{
     if(prev!=val){
       if(val!=eval(prev)+1){          
      array[i]=eval(prev+1);
      prev=eval(prev+1);;
       }else{
          prev=val;
       }
     }
   }
});
4

2 回答 2

2

您可以Array.prototype.map为此使用:

var c = 0,
    array_in = [0,0,1,1,3,3,5,5,7,8,8,8,10],
    array_out = [];
array_out = array_in.map(function(a,i,arr){return (arr[i] > arr[i-1])?++c:c});

// array_out == [0,0,1,1,2,2,3,3,4,5,5,5,6]

看例子

于 2013-04-08T11:01:59.893 回答
-1

这可以在元素按顺序排列时完成。

A[n]=[0,0,1,1,3,3,5,5,7,8,8,8,10] // as these these are in sorted order .
int B[n];

for(int i=1,B[0]=0;i<n;i++)
{
   if(A[i]==A[i-1])
      B[i]=B[i-1];
   else 
      B[i]=B[i-1]+1;
}

最后你会得到 B[n]=[0,0,1,1,2,2,3,3,4,5,5,5,6];

于 2013-04-08T11:03:59.570 回答