js算法題收集

  1. 判斷一個數是否素數

一個素n不是素數一定是兩個因數相乘,一個大於根號n,一個小於根號n。

function isPrime(num) {
  var val = num / 1;
  var bflag = true;
  for (let i = 2; i < Math.ceil(Math.sqrt(val)); i++) {
    let a = val / i;
    if (a % i == 0) {
      bflag = false;
      break;
    }
  }
  return bflag;
}
  1. 求斐波那契數列第n項

斐波那契數列的遞推式:a(n+1) = a(n) + a(n -1) , 其中a1 = a2 =1。

function fibonacci(n) {
  if (n <= 0) {
    return 0;
  }
  if (n == 1) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}

  1. 求兩個整數的最大公約數
function greatestCommonDivisor(x, y) {
  var max = Math.max(x, y);
  var res = 0;
  for (let i = 1; i < max; i ++) {
    if (x % i == 0 && y % i == 0) {
      res = i;
    };
  };
  return res;
}
  1. 數組去重

數組去重有太多的方法,我慢慢收集一點

(1) 利用對象屬性不重複性。時間複雜度O(n)

function distinct(arr) {
  var obj = {};
  var resArr = [];
  for (var i = 0; i < arr.length; i++) {
    var attr = arr[i];
    if (!obj.hasOwnProperty(attr)) {
      obj[attr] = attr;
      resArr.push(attr);
    }
  }
  return resArr;
}

(2) 利用數組檢查的方式。

function distinct(arr) {
  var resArr = [];
  for (var i = 0; i < arr.length; i++) {
    var item = arr[i];
    if (!resArr.includes(item)) {
      resArr.push(item);
    }
  }
  return resArr;
}

(3) 利用Set類型。(好吧,看起來有點簡潔)。

function distinct(arr) {
  return Array.from(new Set(arr));
}

  1. 刪除重複的字符串

此題和數組去重類似了。轉換爲數組和上面代碼一致了。

function distinctStr(str) {
  var arr = str.split('');
  return distinct(arr).join('');
}
  1. 給已經排序好的數組合並且排序

例如:[1,3,5]和[2,4,6]變成[1,2,3,4,5,6]。
思路:用i和j兩個指向,一直往後挪,如果後面那個數組沒有了,就把第一個剩餘數組全部梭哈了。

function mergeSortedArr(arr1, arr2) {
  var ele1 = arr1[0];
  var ele2 = arr2[0];
  var i = 0;
  var j = 0;
  var res = [];
  while(ele1 || ele2) {
    if ((ele1 && !ele2) || (ele1 <= ele2)) {
      res.push(ele1);
      ele1 = arr1[++i];
    } else {
      res.push(ele2);
      ele2 = arr2[++j];
    }
  }
  return res;
}
  1. 字符串反轉

此題不是考數組的reverse方法,而是考循環。

function reverse(str) {
  var res = '';
  for(var i = str.length - 1; i >= 0; i--) {
    res += str[i];
  }
  return res;
}
  1. 單詞反轉

例如:I like you 變成 I ekil uoy
下面方法,請細細品味。

function reverseInPlace(str) {
  return str.split(' ').reverse().join(' ').split('').reverse().join('')
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章