剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
题解
解法1
时间O(nlogn)
空间O(1)
排序后直接比较紧挨着的两个数是否相同即可
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
nums.sort()
n = len(nums)
for i in range(n):
if i == n-1:
return
if nums[i] == nums[i+1]:
return nums[i]
文章图片
解法2
时间O(n)
空间O(n)
新建列表,存储nums超过1return
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
num=[0 for i in range(len(nums))]
for i in nums:
num[i]+=1
if num[i]>=2:
return i
文章图片
解法3
时间O(n)
空间O(1)
交换本身列表,把每个i放在对应的nums[i]上,即,把0放nums[0],6放nums[6]上,若又有一个6,即,6==nums[6]时找到重复,return
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
n = len(nums)
for i in range(n):
while i != nums[i]:
if nums[i] == nums[nums[i]]:
return nums[i]
temp = nums[i]
nums[i], nums[temp] = nums[temp], nums[i]
#注意这里不要写成nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
【LeetCode|LeetCode剑指 Offer 03. 数组中重复的数字python3 3种解法】
文章图片
推荐阅读
- python|pycharm 配置虚拟环境 安装虚拟环境
- python|Win10操作系统(PyTorch虚拟环境配置+PyCharm配置)
- Django|在pycharm中使用命令行创建Django项目
- 剑指offer|剑指 Offer 03. 数组中重复的数字(简单)
- 有了jmespath,处理python中的json数据就变成了一种享受...
- 经典程序|数据结构之用栈来解决括号匹配问题(Java实现)
- 动态规划|LeetCode 300.最长递归子序列
- leetcode|LeetCode 94. 二叉树的中序遍历
- 数据结构与算法|4 单循环链表解决约瑟夫问题