diff --git a/README.md b/README.md index 3fc55ab..b1bc0a2 100644 --- a/README.md +++ b/README.md @@ -357,6 +357,11 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重 - LeetCode 974. 和可被 K 整除的子数组 +- [打家劫舍](src/array/house-robber.js) + + - LeetCode 198. 打家劫舍 + - LintCode 392. 打劫房屋 + ## 栈 - [最大矩阵](src/stack/maximal-rectangle.js) diff --git a/src/array/house-robber.js b/src/array/house-robber.js new file mode 100644 index 0000000..b750e01 --- /dev/null +++ b/src/array/house-robber.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums + * @return {number} + */ +export const rob = function (nums) { + if (!nums) return 0 + const len = nums.length + if (len === 0) return 0 + if (len === 1) return nums[0] + + let first = nums[0]; let second = Math.max(nums[0], nums[1]) + for (let i = 2; i < len; i++) { + const temp = second + second = Math.max(first + nums[i], second) + first = temp + } + return second +} diff --git a/test/array/house-robber.test.js b/test/array/house-robber.test.js new file mode 100644 index 0000000..8c42141 --- /dev/null +++ b/test/array/house-robber.test.js @@ -0,0 +1,7 @@ +import { rob } from '../../src/array/house-robber' + +test('打家劫舍', () => { + expect(rob([1, 2, 3, 1])).toBe(4) + expect(rob([2, 7, 9, 3, 1])).toBe(12) + expect(rob([828, 125, 740, 724, 983, 321, 773, 678, 841, 842, 875, 377, 674, 144, 340, 467, 625, 916, 463, 922, 255, 662, 692, 123, 778, 766, 254, 559, 480, 483, 904, 60, 305, 966, 872, 935, 626, 691, 832, 998, 508, 657, 215, 162, 858, 179, 869, 674, 452, 158, 520, 138, 847, 452, 764, 995, 600, 568, 92, 496, 533, 404, 186, 345, 304, 420, 181, 73, 547, 281, 374, 376, 454, 438, 553, 929, 140, 298, 451, 674, 91, 531, 685, 862, 446, 262, 477, 573, 627, 624, 814, 103, 294, 388])).toBe(29123) +})