简单算法问题

gkw521 2009-10-29 05:00:12
如果求得一个数组中连续相同的三个以上的元素。
例如[1,2,3,3,3,3,4,5,6,7],结果为2-5;(只有一组结果)
再例如[1,2,3,3,3,4,5,6,6,6,6,7,8,9]结果为[2-4,7-10];(可能有多组结果,若有难度,可先考虑一组结果的情况。)
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeenZ 2009-10-29
  • 打赏
  • 举报
回复
看到的时候已经结贴了....

来一个玩玩

<script>
function getSameRange(array){
var obj=new Object();
for(var i=0;i<array.length;i++){
obj[array[i]]=(i+1);
}
var ret=[]
for(var k in obj){
if((obj[++k]-obj[--k])&&(obj[++k]-obj[--k])!=1){
ret[ret.length]=(obj[k])+"-"+(obj[++k]-1)
}
}
return ret
}
var v1=[1,2,3,3,3,3,4,5,6,6,7,7,10,11];
var ret=getSameRange(v1);
alert("结果范围是"+ret)
</script>

James__Zhan 2009-10-29
  • 打赏
  • 举报
回复
看错了题意,郁闷。
gkw521 2009-10-29
  • 打赏
  • 举报
回复
嘿嘿自己也搞定了

var rs=[];
var a=[1,2,3,3,3,4,5,6,6,6,6,7,8,9];
function diff(begin){
if(!a[begin])
return;
var i=0;
var n=begin;
while(a[n+1]&&a[n]==a[n+1]){
i++;
n++;
}
if(i>1){
rs.push(begin+'-'+(begin+i));
}
n++
diff(n);

}
diff(0);
alert(rs.join(','));
James__Zhan 2009-10-29
  • 打赏
  • 举报
回复
稍作修改,满足提问者要求,输出格式为1-3, 2-5.

<script type="text/javascript">
var arr = [1, 2, 2, 3, 3, 3, 5, 6, 6, 7, 8, 8, 9];

function stripDouble(arr){
var a = [];
for(var i = 0; i < arr.length; i++){
if(a[a.length - 1] != arr[i]){
a.push(arr[i]);
}
}
return a;
}

function check(arr){
var ret = [];
var a = stripDouble(arr);
var i = 0;
while(i < a.length - 2){
var x = a[i];
var y = a[i + 1];
var z = a[i + 2];
if(z - x == 2){
ret.push(x + '-' + z);
}
i++;
}
return ret;
}

var ret = check(arr);
for(var i = 0; i < ret.length; i++){
alert(ret[i]);
}
</script>

natineprince 2009-10-29
  • 打赏
  • 举报
回复
凑下热闹

var a=[1,2,3,3,3,3,4,5,6,7];
var b=[1,2,3,3,3,4,5,6,6,6,6,7,8,9];
function re(obj,n){
if(obj[n]==obj[n+1])
return true;
return false;
}
function re2(obj,n){
var ret=n;
if(re(obj,n)&&re(obj,n+1)){
while(re(obj,n)){n++;}
ret=n;
}
return n;
}
function re3(obj){
var list=new Array();
for(var i=0; i<obj.length; i++){
var j=re2(obj,i);
if(i!=j){
list.push(i+"-"+j);
i=j;
}
}
return list;
}
alert(re3(a));
alert(re3(b));
James__Zhan 2009-10-29
  • 打赏
  • 举报
回复
切磋一下。。。

<script type="text/javascript">
var arr = [1, 2, 2, 3, 3, 3, 5, 6, 6, 7, 8, 8, 9];

function stripDouble(arr){
var a = [];
for(var i = 0; i < arr.length; i++){
if(a[a.length - 1] != arr[i]){
a.push(arr[i]);
}
}
return a;
}

function check(arr){
var ret = [];
var a = stripDouble(arr);
var i = 0;
while(i < a.length - 3){
var x = a[i];
var y = a[i + 1];
var z = a[i + 2];
if(z - x == 2){
ret.push({
x: x,
y: y,
z: z
});
}
i++;
}
return ret;
}

var ret = check(arr);
for(var i = 0; i < ret.length; i++){
alert(ret[i].x + ', ' + ret[i].y + ', '+ ret[i].z);
}
</script>

sohighthesky 2009-10-29
  • 打赏
  • 举报
回复
啊,没看到第二种

<script>
var arr=[1,2,3,3,3,4,4,5,6,7];
var res=[];
var last="";
var o=false;
for(var i=0;i<arr.length;i++) {
if(last===arr[i] && !o) {
res.push(arr[i-1]);
} else {
if(res.length<2)
res=[];
else {
if(!o)
res.push(arr[i-1]);
o=true;
}
}
last=arr[i];
}
alert(res);
</script>

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧