【力扣】[剑指offer03]数组中重复的数字

找出数组中重复的数字。

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

链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/

方法一:排序算法

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        // 先对数组进行排序
        sort(nums.begin(), nums.end());

        // 然后找相邻的数字是否相同,相同即返回,
        // 循环至结束,没有找到的话就返回-1
        for(int i = 0; i < nums.size(); ++i)
        {
            int j = i + 1;
            if(nums[i] == nums[j])
                return nums[i];
        }
        return -1;
    }
};

方法二:标记法

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        //创建一个char数组
        unsigned char tmp[nums.size()] ;
        // 将数组的所有字符全部设置为0(这里的0字符常量,四个字节)
        memset(tmp, 0, nums.size());
        for(int i = 0; i < nums.size();++i)
        {
        	// 如果这里tmp[nums[i]]是1,不是第一次出现,就返回
            if(tmp[nums[i]])
                return nums[i];
            // 是第一次出现则置为1
            tmp[nums[i]] = 1;
        }
        return -1;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43967449/article/details/107778528