这是我参与「第四届青训营 」笔记创作活动的第4天
JvavScript And 算法 之间的火花
字符串快速幂
问题:将一个字符串复制nnn次并输出。 首先可以想到最朴素的做法,写一个for循环,将给定字符串不断添加到一个初始为空的字符串上,时间复杂度为O(n)O(n)O(n)。接下来考虑优化,利用快速幂的思想,将nnn拆成2的幂次,这样只需复制log(n)log(n)log(n)次就可以解决问题,时间复杂度O(log(n))O(log(n))O(log(n))。以上时间复杂度的计算不考虑字符串连接的复杂度,当n较小时两种解法效率差别不大。下面给出字符串的代码实现,输入框显示的是字符串复制的结果。
交通灯状态切换
我这里直接放封装函数版本(灵活性和扩展性更好
在数组中查找缺失的数字
Input: [1, 2, 3, 4, 6, 7, 8, 9, 10] Output: 5
`const find_missing = function(input) { let n = input.length + 1;
let sum = 0; for (let i in input) { sum += input[i]; }
return Math.floor((n * (n + 1)) / 2) - sum; }; `
字符串相乘
Input: num1 = "2", num2 = "3" Output: "6"
`const multiply = function(num1, num2) { if (num1 == 0 || num2 == 0) return '0'; const result = [];
for (let a = num1.length - 1; a >= 0; a--) {
for (let b = num2.length - 1; b >= 0; b--) {
const p1 = a + b;
const p2 = a + b + 1;
const sum = (result[p2] ?? 0) + num1[a] * num2[b];
result[p1] = (result[p1] ?? 0) + Math.floor(sum / 10);
result[p2] = sum % 10;
}
}
result[0] == 0 && result.shift();
return result.join('');
}; `