前端常用算法和方法

1,538 阅读1分钟

数据结构

  • Array数组(索引-值)
  • Queue队列(先进先出)
  • Stack栈(后进先出)
  • Map散列(值-值)
  • LinkList链表
  • Heap
  • Tree
  • Graph

常用算法

链表反转

function reverseList(head){
  let prev = null
  let curr = head
  while(curr != null){
    let cnext = curr.next
    curr.next = prev
    prev = curr
    curr = cnext
  }
  return prev
}

返回第n个斐波那契数

//方法一 谨慎使用,超过100会堆栈溢出
function fib(n){
  if(n==0) return 0
  if(n==1) return 1
  return fib(n-2)+fib(n-1)
}
//方法二,速度最快
function fib2(n){
  if(n==0) return 0
  if(n==1) return 1
  let [prev,next]=[1,1]
  for(let i=2;i<n;i++){
    [prev,next]=[next,prev+next]
  }
  return next
}

生成长度为len的斐波那契数列

function fibArr(len=1){
  if(len==1) return [0]
  let [prev,next,arr]=[0,1,[0,1]]
  for(let i=2;i<len;i++){
    [prev,next]=[next,prev+next]
    arr.push(next)
  }
  return arr
}

冒泡排序

function bubbleSort(arr){
  let LEN=arr.length
  for(let i=0;i<LEN;i++){
    for(let j=i+1;j<LEN;j++){
      if(arr[i]>arr[j]){
        //交换数据
        let tmp=arr[i]
        arr[i]=arr[j]
        arr[j]=tmp
      }
    }
  }
  return arr
}

选择排序

function selectSort(arr){
  const LEN=arr.length
  for(let i=0;i<LEN;i++){
  	//其他数字组成的数组算出最小值
    let minIndex=i+1,min=arr[minIndex];
    for(let j=i+2;j<LEN;j++){
      if(arr[j]<min){
        min=arr[j]
        minIndex=j
      }
    }
    //将最小值与arr[i]比
    if(arr[i]>arr[minIndex]){
      let tmp=arr[i]
      arr[i]=arr[minIndex]
      arr[minIndex]=tmp
    }
  }
  return arr
}

二分查找

function BinarySearch(arr,target){
  let [from,to]=[0,arr.length-1]
  let mid=Math.floor((from+to)/2)
  while(from<=to){
    mid=Math.floor((from+to)/2)
    if(arr[mid]>target){
      to=mid-1
    }else if(arr[mid]<target){
      from=mid+1
    }else{
      return mid
    }
  }
  return -1
}

常用方法

更多js实用方法

传送门

数组去重

function unique(arr){
  return [...new Set(arr)]
}

反转字符串

function reverseString(str){
 return str.split("").reverse().join("")
}

生成长度为len的随机字符串

function randomString(len=0){
  const randomFn=()=>{
   const randomNum=Math.floor(Math.random()*(122-65)+65)
   console.log(randomNum)
   return String.fromCharCode(randomNum)
  }
  return Array.from(new Array(len),n=>randomFn()).join("")
}