diff --git a/codes/javascript/chapter_computational_complexity/leetcode_two_sum.js b/codes/javascript/chapter_computational_complexity/leetcode_two_sum.js new file mode 100644 index 000000000..0db9cd705 --- /dev/null +++ b/codes/javascript/chapter_computational_complexity/leetcode_two_sum.js @@ -0,0 +1,43 @@ +/** + * File: leetcode_two_sum.js + * Created Time: 2022-12-15 + * Author: gyt95 (gytkwan@gmail.com) + */ + +function twoSumBruteForce(nums, target) { + const n = nums.length; + // 两层循环,时间复杂度 O(n^2) + for (let i = 0; i < n; i++) { + for (let j = i + 1; j < n; j++) { + if (nums[i] + nums[j] === target) { + return [i, j]; + } + } + } + return []; +} + +function twoSumHashTable(nums, target) { + // 辅助哈希表,空间复杂度 O(n) + let m = {}; + // 单层循环,时间复杂度 O(n) + for (let i = 0; i < nums.length; i++) { + if (m[nums[i]] !== undefined) { + return [m[nums[i]], i]; + } else { + m[target - nums[i]] = i; + } + } + return []; +} + +/* Driver Code */ +// 方法一 +const nums = [2, 7, 11, 15], target = 9; + +let res = twoSumBruteForce(nums, target); +console.log("方法一 res = ", res); + +// 方法二 +res = twoSumHashTable(nums, target); +console.log("方法二 res = ", res); diff --git a/docs/chapter_computational_complexity/space_time_tradeoff.md b/docs/chapter_computational_complexity/space_time_tradeoff.md index b29b03fa0..23c2ae7a6 100644 --- a/docs/chapter_computational_complexity/space_time_tradeoff.md +++ b/docs/chapter_computational_complexity/space_time_tradeoff.md @@ -90,7 +90,18 @@ comments: true === "JavaScript" ```js title="leetcode_two_sum.js" - + function twoSumBruteForce(nums, target) { + const n = nums.length; + // 两层循环,时间复杂度 O(n^2) + for (let i = 0; i < n; i++) { + for (let j = i + 1; j < n; j++) { + if (nums[i] + nums[j] === target) { + return [i, j]; + } + } + } + return []; + } ``` === "TypeScript" @@ -204,7 +215,19 @@ comments: true === "JavaScript" ```js title="leetcode_two_sum.js" - + function twoSumHashTable(nums, target) { + // 辅助哈希表,空间复杂度 O(n) + let m = {}; + // 单层循环,时间复杂度 O(n) + for (let i = 0; i < nums.length; i++) { + if (m[nums[i]] !== undefined) { + return [m[nums[i]], i]; + } else { + m[target - nums[i]] = i; + } + } + return []; + } ``` === "TypeScript"