js常用算法

數(shù)組去重:
function unique (arr){
  var obj={};
  var result=[];
  arr.map(()=>{
      if(!obj[item]){
          obj[item]=true;
          result.push(item)
        }
  })  
return result;
}
階乘
function factorialize(num) {
  var result = 1;
    if(num < 0) 
      return -1;
    if(num == 0 || num == 1)
       return 1;
    while(num>1) {
      result *= num--;
    }
    return result;
}
function factorialize(num) {
  var result = 1;
  if(num < 0) 
    return -1;
  if(num == 0 || num == 1)
     return 1;
  if(num > 1)
     return num*factorialize(num-1);
}
生成菲波那切數(shù)列
function getFibonacci(n) {
  var fibarr = [];
  var i = 0;
  while(i < n) {
    if(i <= 1) {
      fibarr.push(i);
    } else {
      fibarr.push(fibarr[i - 1] + fibarr[i - 2])
    }
    i++;
  }
  return fibarr;
}
let count = 0;
function fn(n) {
    let cache = {};
    function _fn(n) {
        if (cache[n]) {
            return cache[n];
        }
        count++;
        if (n == 1 || n == 2) {
            return 1;
        }
        let prev = _fn(n - 1);
        cache[n - 1] = prev;
        let next = _fn(n - 2);
        cache[n - 2] = next;
        return prev + next;
    }
    return _fn(n);
}
二分查找
function binary_search(arr, key) {
  var low = 0,
      high = arr.length - 1;
  while(low <= high){
    var mid = parseInt((high + low) / 2);
    if(key == arr[mid]){
      return mid;
    }else if(key > arr[mid]){
      low = mid + 1;
    }else if(key < arr[mid]){
      high = mid -1;
    }
  }
  return -1;
}
實(shí)現(xiàn)棧的功能

定義一個(gè)棧

function Stack () {
    this.dataStore = [];    //初始化為空
    this.top = 0;           //記錄棧頂位置
}

實(shí)現(xiàn)棧的pop,push

//元素入棧,棧頂位置加1
function push( ele ){
    this.dataStore[this.top++] = ele;
}
//元素出棧,棧頂-1
function pop(){
    return this.dataStore[--this.top];
}
實(shí)現(xiàn)鏈表的find,remove,add功能

定義一個(gè)鏈表

function Node(ele) {
    this.element = ele;   //當(dāng)前節(jié)點(diǎn)的元素
    this.next = null;         //下一個(gè)節(jié)點(diǎn)鏈接
}

查找元素

function find ( item ) {
    var currNode = this.head;
    while ( currNode.element != item ){
        currNode = currNode.next;
    }
    return currNode;
}

插入元素

function insert ( new , item ) {
    var newNode = new Node( new );
    var currNode = this.find( item );
    newNode.next = currNode.next;
    currNode.next = newNode;
}

刪除元素

//找到刪除元素的前一個(gè)節(jié)點(diǎn)
function findPrev( item ) {
    var currNode = this.head;
    while ( !( currNode.next == null) && ( currNode.next.element != item )){
        currNode = currNode.next;
    }
    return currNode;
}

function remove ( item ) {
    var prevNode = this.findPrev( item );
    if( !( prevNode.next == null ) ){
        prevNode.next = prevNode.next.next;
    }
}
實(shí)現(xiàn)隊(duì)列的in,out

定義隊(duì)列

function Queue(){
var this.queue=[]
}

隊(duì)尾in

function In(ele){
this.queue.push(ele)
}

隊(duì)首o(hù)ut

function Out(){
this.queue.shift()
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 雖說我們很多時(shí)候前端很少有機(jī)會接觸到算法,但對算法的理解和掌握是一個(gè)優(yōu)秀工程師的評價(jià)標(biāo)準(zhǔn)之一,而且當(dāng)我們面對較為復(fù)...
    emoipower閱讀 1,293評論 0 2
  • 可能一輩子也就這樣吧。 我已經(jīng)為自己活了一次,接下來為別人而活也沒關(guān)系。 如果我說我真是那種沒有愛活不下去的人,你...
    肖笑笑要大聲笑閱讀 120評論 0 0
  • 1.學(xué)習(xí)象沙漏:就是說不要想把一本書都吞下去,要找對自己有用的,能激發(fā)興趣的內(nèi)容。包括瀏覽,提問,閱讀,復(fù)述和復(fù)習(xí)...
    濃湯閱讀 425評論 1 6
  • 首先在- (void)webViewDidFinishLoad:(UIWebView *)webView方法中獲取...
    Hai1丶HydrA閱讀 1,919評論 0 1
  • 中信書院閱讀 290評論 0 0

友情鏈接更多精彩內(nèi)容