---
# System prepended metadata

title: 数组中重复的数字/寻找重复数/存在重复元素
tags: [LeeCode]

---

# 数组中重复的数字/寻找重复数/存在重复元素
---

```javascript=
找出数组中重复的数字。


在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1：

输入：
[2, 3, 1, 0, 2, 5, 3]

输出：2 或 3 

限制：

2 <= n <= 100000
```

:::success
```go=
/*
    利用map的特性，key的唯一性。
*/
func findRepeatNumber(nums []int) int {
	maps := make(map[int]int, 0)
	result := make([]int, 0)
	resp := -1
	for i := 0; i < len(nums); i++ {
		value, ok := maps[nums[i]]
		if !ok {
			maps[nums[i]] = i
		} else {
			resp = nums[value]
			break
		}
	}

	if len(result) == 0 {
		return resp
	}

	return resp
}

// 有序数组比较

func findRepeatNumber(nums []int) int {
	if len(nums) <= 1 {
		return -1
	}
	sort.Ints(nums) // 数组已经有序，只要跟自己的下一个比较就能找到重复元素
	result := nums[0] // 初始比较值
	for i := 1; i < len(nums); {
		if isEqual(result, nums[i]) { // 找到重复元素即终止查找
			break
		}
		result = nums[i] // 新的比较值
		i++ // 与数组的下一个元素开始比较
	}

	return result
}

func isEqual(a, b int) bool {
	return a == b
}

// TODO 快慢指针，二进制解法，二分法
```
:::

###### tags: `LeeCode`