剑指offer 03.数组中重复的数字 -- JAVA、python实现

数组中重复数字的查找算法
这篇博客介绍了三种不同的算法来解决寻找数组中重复数字的问题。第一种是双重循环法,虽然简单但效率较低;第二种是排序法,通过排序后的相邻元素比较找到重复项;第三种是使用Python的set特性,通过比较集合中元素数量和索引位置来快速找到重复数。这些方法分别适用于不同的场景,考虑到了时间和空间复杂度的平衡。

题目

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

示例 1:

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

限制:

2 <= n <= 100000

法1-- java

  • 双重for循环 (n*n复杂度)
class Solution {
    public int findRepeatNumber(int[] nums) {
       
        for(int i= 0; i<nums.length; i++){
            for(int j = i+1; j < nums.length;j++){
                if(nums[i]==nums[j]){
                    return nums[i];                                  
                }
            }
        }
        return 1;
    }      
}

法2-- java、python

  • 排序: 排序后的数组相同的元素必挨着,比较相邻元素是否相等就行 – O(n)
class Solution {
    public int findRepeatNumber(int[] nums) {
        Arrays.sort(nums);  // 这个排序方式要记住
        int num = 0; // 用户记录那个相同的数,用作最后的返回
        for(int i = 0; i < nums.length-1; i++){
            if(nums[i] == nums[i+1]){
                 num = nums[i];
                break;
            }     
        }
        return num;
    }
}
class Solution(object):
    def findRepeatNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        for i in range(len(nums)-1):
            if nums[i] == nums[i+1]:
                return nums[i]

法3 – python

  • 利用set()的无重复元素的特性进行判断
class Solution(object):
    def findRepeatNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        temp_set = set()
        repeat = -1 # 重复的数
        for i in range(len(nums)):
            temp_set.add(nums[i]) # 第一个数存入集合
            if len(temp_set) < i+1:
                repeat = nums[i]
                break
        return repeat
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值