高频考题!数组中找重复数字(算法 NO.1)

Doocs开源社区

共 393字,需浏览 1分钟

 ·

2020-08-06 21:33

本题来自 LeetCode 中国网站,属于算法面试中的一道经典高频考题。题解由 Doocs 开源社区 leetcode 项目维护者提供。

目前已经有超过 50 位开发者参与了此项目,期待你的加入!

项目地址:https://github.com/doocs/leetcode

题目描述

找出数组中重复的数字。

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

示例 1:

输入:[2, 3, 1, 0, 2, 5, 3]输出:2  3 

限制:

2 <= n <= 100000

解法

0~n-1 范围内的数,分别还原到对应的位置上,如:数字 2 交换到下标为 2 的位置。

若交换过程中发现重复,则直接返回。

Python3

class Solution:    def findRepeatNumber(self, nums: List[int]) -> int:        for i, num in enumerate(nums):            while i != num:                if num == nums[num]:                    return num                nums[i], nums[num] = nums[num], nums[i]                num = nums[i]        return -1

Java

class Solution {    public int findRepeatNumber(int[] nums) {        for (int i = 0, len = nums.length; i < len; ++i) {            while (i != nums[i]) {                if (nums[i] == nums[nums[i]]) {                    return nums[i];                }                swap(nums, i, nums[i]);            }        }        return -1;    }    private void swap(int[] nums, int i, int j) {        int t = nums[i];        nums[i] = nums[j];        nums[j] = t;    }}

长按识别下图二维码,关注公众号「Doocs开源社区」,第一时间跟你们分享好玩、实用的技术文章与业内最新资讯。



浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报