比如我有15个20以内的数,按从小到大排列,可以是任意的,可以有相同,相同的最多不超个4个,比如说里面最多有4个1,
例子
它们是 1,1,1,2,3,4,5,7,8,9,10,12,12,13,15
我这样标记他们,
他的的位置, 数值
1 1
2 1
3 1
4 2
5 3
6 4
7 5
8 7
9 8
10 9
11 10
12 12
13 12
14 13
15 15
我现要找出这3或4个相同的数,,并把他们替换成0 ,还要知道他的的位置
这个例子里面可以找到3个相同的1 并写出1 ,还要写出他们的位置,1,2,3
结果是:这串数变成: 0,0,0,2,3,4,5,7,8,9,10,12,12,13,15
3个相同的数:1
4个相同的数:(无)
他们的位置: 1,2,3
用js 实现,,
低手,请给出具体代码
最开始20以内的数可以有0,0的数量不限4个以内,或者说里面可以有0,但无论有几个0我都不理他,
=======
<script>
var a=[1,1,1,2,3,3,3,3,4,5,6,6,6,6,6,7,8,8,8,8,9,10,12,12,13,15];
//下句排序如果原数据已排可以去掉
a=a.sort(function(x,y){return x-y;});
var d=new Object();
function Record(e,p){
this.element=e;
this.pos=p;
}
document.writeln("处理前的数组:");
for(var i in a) document.write(a[i]+' ');
var c=1,r=new Record(a[0],0);
for(var i=1;i<a.length; i++){
if(a[i]==r.element) c++;
else{
d[c]=(c in d)? d[c].concat(r):[r];
if(c>=3) for(var p=r.pos;p<i; p++) a[p]=0;
r=new Record(a[i],i);
c=1;
}
}
document.writeln("<br/>处理后的数组:");
for(var i in a) document.write(a[i]+' ');
document.writeln('<br/>');
for(var k in d){
if(k>=3){
document.writeln(k+"个相同-数(位置): ")
for(var i in d[k])
document.writeln(d[k][i].element+'('+d[k][i].pos+') ');
document.writeln('<br/>');
}
}
</script>
=============
处理前的数组: 1 1 1 2 3 3 3 3 4 5 6 6 6 6 6 7 8 8 8 8 9 10 12 12 13 15
处理后的数组: 0 0 0 2 0 0 0 0 4 5 0 0 0 0 0 7 0 0 0 0 9 10 12 12 13 15
3个相同-数(位置): 1(0)
4个相同-数(位置): 3(4) 8(16)
5个相同-数(位置): 6(10)
==========
由于有起始位置,就没必要逐个打印位置。比如
“3个相同-数(位置): 1(0) ”
就知道1从位置0开始重复3次,0, 1, 2追问
非常感谢您,解决了我的问题,但里面好多代码我不明白什么意思,能给我写出更多注解吗?
追答要注意知识点
1、“js的对象”和“js的数组”的特点和区别
2、JSON标记法
3、用比较函数排序
4、js的函数function、函数对象Function,作为头等函数对象first-class function的意义
5、小语法工具如 for in, 三元表达式
搞定这些就自然看懂了。不然每个点都要讲一大段。
document.writeln("处理前的数组:");
这一句话为什么不能删除啊,删了就无法运行
可以删的。一定是连带删了其他地方。