JavaScript和算法的亿些事| 青训营笔记

71 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第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('');

}; `