diff --git a/README.md b/README.md
index ba7864c..c0849c3 100644
--- a/README.md
+++ b/README.md
@@ -348,6 +348,11 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重
- LeetCode 146. LRU缓存机制
- LintCode 134. LRU缓存策略
+- [寻找重复数](src/array/find-the-duplicate-number.js)
+
+ - LeetCode 287. 寻找重复数
+ - LintCode 633. 寻找重复的数
+
## 栈
- [最大矩阵](src/stack/maximal-rectangle.js)
diff --git a/src/array/find-the-duplicate-number.js b/src/array/find-the-duplicate-number.js
new file mode 100644
index 0000000..2aabe44
--- /dev/null
+++ b/src/array/find-the-duplicate-number.js
@@ -0,0 +1,24 @@
+/**
+ * @param {number[]} nums
+ * @return {number}
+ */
+export const findDuplicate = function (nums) {
+ const len = nums.length
+ let l = 0; let r = len - 1; let res = -1 // 数字都在1-n
+ while (l <= r) {
+ const mid = (l + r) >> 1
+ let cnt = 0
+ for (let i = 0; i < len; i++) {
+ cnt += nums[i] <= mid // true = 1,满足条件才计数
+ }
+
+ if (cnt <= mid) {
+ l = mid + 1
+ } else {
+ r = mid - 1
+ res = mid
+ }
+ }
+
+ return res
+}
diff --git a/test/array/find-the-duplicate-number.test.js b/test/array/find-the-duplicate-number.test.js
new file mode 100644
index 0000000..9e79137
--- /dev/null
+++ b/test/array/find-the-duplicate-number.test.js
@@ -0,0 +1,6 @@
+import { findDuplicate } from '../../src/array/find-the-duplicate-number'
+
+test('寻找重复数', () => {
+ expect(findDuplicate([1, 3, 4, 2, 2])).toBe(2)
+ expect(findDuplicate([3, 1, 3, 4, 2])).toBe(3)
+})