js實現常見的幾種演算法(陣列去重、字元統計、二分查詢等)
阿新 • • 發佈:2018-12-31
1、陣列去重:利用物件屬性進行篩選
function filter(arr){
let obj={};
let newArr=[];
for (let i=0;i<arr.length;i++){
if (!obj[arr[i]]) {
obj[arr[i]]=true;
newArr.push(arr[i]);
}
}
return newArr;
}
利用ES6(set資料型別)快速實現:
2、統計字元次數(同樣利用物件屬性實現)let arr1 =[2,3,12,4,3,1,2] function filter2(arr){ return Array.from(new Set(arr)); } console.log(filter2(arr1));// 輸出[2, 3, 12, 4, 1]
function staticsis(str){ let obj ={},str1 =str.split(''),length = str1.length,char ='',count=1; if(length>0){ for(let i=0;i<length;i++){ let val = str1[i]; obj[val] =(obj[val])? ++obj[val]:1; } for(var key in obj){ if(obj[key]>=count){ count = obj[key]; char = key; } } } return char; } staticsis('ssasaswwqwsssssss123')//返回's'
3、二分查詢:(針對升序列表,不斷進行二分,直到找到或者確定無)
function searHalf(arr,val){
let length = arr.length,low =0,high=length-1;
while(low<=high){
let mid = Math.floor((high+low)/2);
if(arr[mid]===val){return mid;}
else if(arr[mid]<val){low =mid+1;}
else if(arr[mid]>val){high=mid-1;}
}
return -1;
}
4、不借助第三個變數交換兩個變數值(交換律與結合律)
5、斐波那契數列(非遞迴實現)function swap(a,b){ b = b-a; a = a+b; //a=a+(b-a)=b; b = a-b; //b=a-b=b-(b-a)=a }
function fibo(n){
let arr=[];
if(n>0){
arr[0] =0;
if(n==1){return arr;}
arr[1] =1;
for(let i=2;i<n;i++){
arr[i] = arr[i-1]+arr[i-2];
}
}
return arr;
}
6、隨機生成字串
function randomStr(n){
let str='abcdefghijkmnopqrstuvwxyz9876543210',newStr='',m =str.length;
for(let i=0;i<n;i++){
newStr+=str.charAt(Math.floor(Math.random()*m))
}
return newStr;
}