- 判断一个数是否素数
一个素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;
}
- 求斐波那契数列第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);
}
- 求两个整数的最大公约数
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) 利用对象属性不重复性。时间复杂度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));
}
- 删除重复的字符串
此题和数组去重类似了。转换为数组和上面代码一致了。
function distinctStr(str) {
var arr = str.split('');
return distinct(arr).join('');
}
- 给已经排序好的数组合并且排序
例如:[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;
}
- 字符串反转
此题不是考数组的reverse方法,而是考循环。
function reverse(str) {
var res = '';
for(var i = str.length - 1; i >= 0; i--) {
res += str[i];
}
return res;
}
- 单词反转
例如:I like you 变成 I ekil uoy
下面方法,请细细品味。
function reverseInPlace(str) {
return str.split(' ').reverse().join(' ').split('').reverse().join('')
}