From 419b1940e55651cb034b717b067297a6922d2ead Mon Sep 17 00:00:00 2001 From: Kohei Asai Date: Sun, 29 Sep 2019 20:50:29 -0700 Subject: [PATCH] 169. Majority Element --- solutions/majorityElement.test.ts | 11 +++++++++++ solutions/majorityElement.ts | 15 +++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 solutions/majorityElement.test.ts create mode 100644 solutions/majorityElement.ts diff --git a/solutions/majorityElement.test.ts b/solutions/majorityElement.test.ts new file mode 100644 index 0000000..6d23ea1 --- /dev/null +++ b/solutions/majorityElement.test.ts @@ -0,0 +1,11 @@ +import majorityElement from "./majorityElement"; + +describe("169. Majority Element", () => { + const TEST_CASES = new Map([[[3, 2, 3], 3], [[2, 2, 1, 1, 1, 2, 2], 2]]); + + for (const [nums, expected] of TEST_CASES) { + it(`returns ${expected} when calling with [${nums}]`, () => { + expect(majorityElement(nums)).toBe(expected); + }); + } +}); diff --git a/solutions/majorityElement.ts b/solutions/majorityElement.ts new file mode 100644 index 0000000..fed4839 --- /dev/null +++ b/solutions/majorityElement.ts @@ -0,0 +1,15 @@ +// 169. Majority Element +// https://leetcode.com/problems/majority-element/ +export default function majorityElement(nums: number[]): number { + const counts = new Map(); + + for (const num of nums) { + const count = (counts.get(num) || 0) + 1; + + if (count >= nums.length / 2) return num; + + counts.set(num, count); + } + + throw new Error(); +}