From 06d357b002acf3a6eecf7872c111a605a86ab3fc Mon Sep 17 00:00:00 2001 From: yige Date: Sun, 24 May 2020 23:46:31 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=9F=A0=E6=AA=AC=E6=B0=B4=E6=89=BE?= =?UTF-8?q?=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ src/array/lemonade-change.js | 31 ++++++++++++++++++++++++++++++ test/array/lemonade-change.test.js | 9 +++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/array/lemonade-change.js create mode 100644 test/array/lemonade-change.test.js diff --git a/README.md b/README.md index 23ba1a0..3a086b2 100644 --- a/README.md +++ b/README.md @@ -338,6 +338,11 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重 - LintCode 1613. 最高频率的IP +- [柠檬水找零](src/array/lemonade-change.js) + + - LeetCode 860. 柠檬水找零 + - LintCode 1509. 柠檬水找零 + ## 栈 - [最大矩阵](src/stack/maximal-rectangle.js) diff --git a/src/array/lemonade-change.js b/src/array/lemonade-change.js new file mode 100644 index 0000000..d83db72 --- /dev/null +++ b/src/array/lemonade-change.js @@ -0,0 +1,31 @@ +/** + * @param {number[]} bills + * @return {boolean} + */ +export const lemonadeChange = function (bills) { + const map = new Map() + + while (bills.length) { + const money = bills.shift() + + if (money === 5) { + map.set(5, (map.get(5) || 0) + 1) + } else { + let change = money - 5 + while (change !== 0 && change - 10 > 0 && map.get(10) > 0) { + map.set(10, map.get(10) - 1) + change -= 10 + } + + while (change !== 0 && map.get(5) > 0) { + map.set(5, map.get(5) - 1) + change -= 5 + } + + if (change !== 0) return false + map.set(money, (map.get(money) || 0) + 1) + } + } + + return true +} diff --git a/test/array/lemonade-change.test.js b/test/array/lemonade-change.test.js new file mode 100644 index 0000000..301587c --- /dev/null +++ b/test/array/lemonade-change.test.js @@ -0,0 +1,9 @@ +import { lemonadeChange } from '../../src/array/lemonade-change' + +test('柠檬水找零', () => { + expect(lemonadeChange([5, 5, 5, 5, 10, 5, 10, 10, 10, 20])).toBe(true) + expect(lemonadeChange([5, 5, 5, 10, 20])).toBe(true) + expect(lemonadeChange([5, 5, 10])).toBe(true) + expect(lemonadeChange([10, 10])).toBe(false) + expect(lemonadeChange([5, 5, 10, 10, 20])).toBe(false) +})