55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package top100liked
|
||
|
||
import (
|
||
"testing"
|
||
)
|
||
|
||
// https://leetcode.cn/problems/find-the-duplicate-number/?envType=study-plan-v2&envId=top-100-liked
|
||
// 287. 寻找重复数
|
||
//
|
||
// 给定一个包含 `n + 1` 个整数的数组 `nums` ,其数字都在 `[1, n]` 范围内(包括 `1` 和 `n`),可知至少存在一个重复的整数。
|
||
// 假设 `nums` 只有 一个重复的整数 ,返回 这个重复的数 。
|
||
// 你设计的解决方案必须 不修改 数组 `nums` 且只用常量级 `O(1)` 的额外空间。
|
||
// 示例 1:
|
||
// 输入:nums = [1,3,4,2,2]
|
||
// 输出:2
|
||
// 示例 2:
|
||
// 输入:nums = [3,1,3,4,2]
|
||
// 输出:3
|
||
// 示例 3 :
|
||
// 输入:nums = [3,3,3,3,3]
|
||
// 输出:3
|
||
//
|
||
// 提示:
|
||
// - `1 <= n <= 10^5`
|
||
// - `nums.length == n + 1`
|
||
// - `1 <= nums[i] <= n`
|
||
// - `nums` 中 只有一个整数 出现 两次或多次 ,其余整数均只出现 一次
|
||
// 进阶:
|
||
// - 如何证明 `nums` 中至少存在一个重复的数字?
|
||
// - 你可以设计一个线性级时间复杂度 `O(n)` 的解决方案吗?
|
||
//
|
||
func findDuplicate(nums []int) int {
|
||
|
||
}
|
||
|
||
func TestFindDuplicate(t *testing.T) {
|
||
cases := []struct {
|
||
name string
|
||
nums []int
|
||
want int
|
||
}{
|
||
{"example1", []int{1, 3, 4, 2, 2}, 2},
|
||
{"example2", []int{3, 1, 3, 4, 2}, 3},
|
||
{"example3", []int{3, 3, 3, 3, 3}, 3},
|
||
}
|
||
for _, c := range cases {
|
||
t.Run(c.name, func(t *testing.T) {
|
||
got := findDuplicate(c.nums)
|
||
if got != c.want {
|
||
t.Errorf("got %v, want %v", got, c.want)
|
||
}
|
||
})
|
||
}
|
||
}
|