js一些算法实现

时间:2022-09-06 20:44:53
1.约瑟夫环实现
 //附有调试
function joseph(n,p){
var arr=[];
for(var i=0;i<n;i++){
arr.push(i);
}
debugger;
var flag=0;
var outnum=0;
while(arr.length>1){
//定义到里面 下次外层循环,数组长度已改变,定义到外面的话会死循环,浏览器卡死
var len=arr.length;
for(var i=0;i<len;i++){
flag++;
if(flag==p){
flag=0;
//自行脑补
arr.splice(i-outnum,1);
outnum++;
}
}
}
return arr[0];
}
//IE8以下不支持console.log()
if(window.console){
console.log(joseph(20,3));
}
else{
window.console={
log:function(){},
happentime:function(){}
//对象字面量方式自行构建
}
}

2.斐波那契数列实现

  1 类似数列:1,1,2,3,5,8,13,21。。。。。
2
3 function ftbn(n){
4 if(n=1||n=2){
5 return 1;
6 }
7 else
8 {
9 return ftbn(n-1)+ftbn(n-2);
10 }
11 }

3.编写insertAfter

  function insertAfter(newElement,targetElement){

                var parent=targetElement.parentNode;

                if(parent.lastChild==targetElement){

                  targetElement.appendChild(newElement);

 }

 else{

        parent.insertBefore(newElement,targetElement.nextSibling);

 }

 }

4.数组去重

 var ss=[1,2,3,3,44,55,55,77,2,3,1];
function decode2(){
var arry={};
var index=0;
var ss2=[];
var len=ss.length;
for(var i=0;i<len;i++){
if(arry[ss[i]]==undefined){ arry[ss[i]]=1;
ss2[index++]=ss[i];
}
else if(arry[ss[i]==1]){continue;}
}
return ss2
}
decode2();

5.实现一个函数,判断一个字符串内出现最多次的字符,并统计这个字符

 var  s="helloworld";
function countStr(str){
var len=str.length;
var obj={};
for(var i=0;i<len;i++){
var k=str.charAt(i);
if(obj[k]){
obj[k]++;
}
else
{
obj[k]=1;
}
}
var m=0,i=null;
for(var b in obj){
if(obj[b]>m){
m=obj[b];
i=b;
}
}
return i+":"+m;
} countStr(s);