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('')
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三和小钢炮

谢谢客官~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值