leetcode 287. Find the Duplicate Number 三种解法

本文详细介绍了LeetCode第287题的三种解决方案。题目要求在包含[1, n]数字的int[n+1]数组中找到唯一的重复数字。解法包括直接存储所有元素、排序以及使用快慢指针的龟兔赛跑方法。注意,题中存在陷阱,如[2,2,2,2,2]这样的测试用例。" 106783469,8642310,告别手工报表:自动化报表解决方案,"['数据分析', '大数据', '报表工具']
摘要由CSDN通过智能技术生成

题意

int[n + 1] 的数组里存着[1,n]的数字,找出重复我唯一数字。

testcase

[1,3,4,2,2]
[3,1,3,4,2]
[2,2,2,2,2]
[1,1]
[1,1,2]

一开始以为存了1到n,多一个不知道什么数,求出它就行了。所以我用求和1到n,然后遍历减去,最后乘以-1,结果错了,因为用例里有[2,2,2,2,2],坑!

解1

最简单的方法全部存下来。空间复杂度O(N)。

	// Runtime: 0 ms, faster than 100.00% of Java online submissions for Find the Duplicate Number.
	//Memory Usage: 38.7 MB, less than 13.96% of Java online submissions for Find the Duplicate Number.
	public int findDuplicate(int[] nums) {
	    boolean[] visited = new boolean[nums.length];
	    for (int num : nums) {
	        if (visited[num])
	            return num;
	        visited[num] = true;
	    }
	    return 0;
	}

解2

排序

    // Runtime: 2 ms, faster than 49.95% of Java online submissions for Find the Dupl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值