🚀 前言
大家好呀,我是毛小悠,可以叫我二毛,在家中排行老二,是一名前端开发工程师。
本系列文章旨在通过练习来提高JavaScript的能力,一起愉快的做题吧。😀😀😀
以下每道题,二毛我都有尝试做一遍。建议限时训练,比如限定为半小时,如果半小时内想不出来,可以结合文章末尾的参考答案来思考。
可以在下方评论区留言或者加我的微信:code_maomao。期待你的到来。
求关注求点赞👍~~~😘😘😘
📖 题目1:归零
编写一个采用数组并将所有零移动到末尾的算法,同时保留其他元素的顺序。
moveZeros([false,1,0,1,2,0,1,3,"a"]) // returns[false,1,1,2,1,3,"a",0,0]
习题代码
var moveZeros = function (arr) {
}
📖 题目2:素数
给定正数n> 1,找到n的素因分解。结果将是具有以下形式的字符串:
"(p1**n1)(p2**n2)...(pk**nk)"
a ** b意味着a的b次方。
2*3=2*2*2;
其中p(i)递增,如果n(i)为1,则n(i)为空。
Example: n = 86240 should return "(2**5)(5)(7**2)(11)"
习题代码
function primeFactors(n){
}
📖 题目3:计算方差
编写一个函数,该函数将接受一个数字序列并计算该序列的方差。
通过从每个值中减去平均值,对结果进行平方,将所有结果相加并除以元素数量,可以得出一组数字的方差。
例如,使用伪代码来计算的方差[1, 2, 2, 3]。
mean = (1 + 2 + 2 + 3) / 4
=> 2
variance = ((1 - 2)^2 + (2 - 2)^2 + (2-2)^2 + (3 - 2)^2) / 4
=> 0.5
使用Javascript的toFixed方法将结果四舍五入到小数点后四位时,将测试结果。
习题代码:
var variance = function(numbers) {};
📖 题目4:查找奇数int
给定一个整数数组,找到出现奇数次的整数。
始终只有一个整数出现奇数次。
习题代码
function findOdd(A) {
//happy coding!
return 0;
}
答案
🍗 题目1的答案
参考答案1:
var moveZeros = function (arr) {
return arr.filter(function(x) {return x !== 0}).concat(arr.filter(function(x) {return x === 0;}));
}
参考答案2:
var moveZeros = function (arr) {
let result = arr.filter(c => c !== 0)
let count = arr.length - result.length
return result.concat(Array(count).fill(0))
}
参考答案3:
var moveZeros = function (arr) {
return arr
.filter((val) => val !== 0)
.concat(arr.filter((val) => val === 0));
}
🍗 题目2的答案
参考答案1:
function primeFactors(n){
for (var i=2, res="", f; i <= n; i++) {
f=0;
while (n%i == 0) { f++; n/=i }
res += f ? "(" + ( f>1 ? i+"**"+f : i ) +")" : ""
}
return res || "("+n+")"
}
参考答案2:
function primeFactors(n){
for(var s = '', d = 2;n>1;d++) {
for (var k = 0;n%d == 0;k++, n/=d);
s += k ? (k==1 ? `(${d})` : `(${d}**${k})`) : '';
}
return s
}
参考答案3:
const primeFactors = n => {
if (n < 2) return `(${n})`;
let factors = '';
for ( let i = 2; i <= n; i++) {
let count = 0;
while ( n%i === 0 ) {
count++;
n /= i;
}
if (count) {
factors += `(${i}`;
if (count > 1) factors += `**${count}`;
factors += `)`;
}
}
return factors;
}
🍗 题目3的答案
参考答案1:
var variance = function(numbers) {
var mean = numbers.reduce(function (prev, v) { return prev + v }) / numbers.length
return numbers.reduce(function (prev, v) { return prev + Math.pow(v - mean, 2) }, 0) / numbers.length
};
参考答案2:
var variance = function(numbers) {
var countNumbers = numbers.length;
var mean = 0.0;
var i = countNumbers;
while (i--)
{
mean += numbers[i]
}
mean /= countNumbers;
var variance = 0.0;
i = countNumbers;
while (i--)
{
variance += Math.pow(numbers[i] - mean, 2);
}
variance /= countNumbers;
return variance;
};
参考答案3:
const variance = ns => {
const mean = ns.reduce((s, n) => s + n) / ns.length;
return ns.reduce((v, n) => v + (n - mean) ** 2, 0) / ns.length;
}
参考答案4:
var variance = function(numbers) {
const mean = numbers.reduce((sum, i) => sum + i) / numbers.length;
return numbers.reduce((sum, i) => sum + (i - mean)**2, 0) / numbers.length;
};
🍗 题目4的答案
参考答案1:
const findOdd = (xs) => xs.reduce((a, b) => a ^ b);
参考答案2:
function findOdd(A) {
var obj = {};
A.forEach(function(el){
obj[el] ? obj[el]++ : obj[el] = 1;
});
for(prop in obj) {
if(obj[prop] % 2 !== 0) return Number(prop);
}
}
参考答案3:
function findOdd(A) {
return A.reduce(function(c,v){return c^v;},0);
}
参考答案4:
function findOdd(arr) {
var result, num = 0;
arr = arr.sort();
for (var i = 0; i < arr.length; i++) {
if (arr[i] === arr[i+1]) {
num++;
} else {
num++;
if (num % 2 != 0) {
result = arr[i];
break;
}
}
}
return result;
}
🍁后序
本系列会定期更新的,题目会由浅到深的逐步提高。
求关注求点赞 👍~~🍭🍭🍭
可以关注我的公众号:前端毛小悠。欢迎阅读
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。