剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字,第1张

日常刷题中🐵
前言:

     当我们学习语言的过程中,刷题是相当重要的部分,它不仅可以提高我们的编程思维,同时也能锻炼自己的代码能力,所以我们要保证自己的刷题量 。给自己定个小目标,每天都要提交GitHub,每天给自己整一个绿点。

我的刷题代码都在Exercise库中提交。

GitHub网址:

diwei00 (github.com)https://github.com/diwei00

LeetCode链接:

剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode)https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/

题目:

🎈找出数组中重复的数字。

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

示例1:

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

限制:

2 <= n <= 100000

分析:

     要想遍历这个数组找出重复的数据,因为不知道是哪个数据重复,所以在遍历的时候无法进行比较。那么就考虑先开辟一个同样大小的数组,先把第一个数据拷贝进去。当拷贝后面数据时,每拿一个数据和新开辟数组数据全比较一遍 ,如果有相同的数据则就是重复的数字,直接返回,如果没有则就把这个数据入进新开辟的数组。

代码实现:
int findRepeatNumber(int* nums, int numsSize)
{
    int* arr = (int*)malloc(sizeof(int) * numsSize);
    int index = 0;
    int i = 0;
    //先把第一个数据入进去
    arr[index++] = nums[0];
    int sz_arr = 1;//记录容量
    for(i = 1; i < numsSize; i++)
    {
        int j = 0;
        for(j = 0; j < sz_arr; j++)
        {
            if(nums[i] != arr[j])
            {
                ;
            }
            else
            {
                //相同,直接返回
                return nums[i];
            }
        }
        //新数组中没有重复的数字,则入数据
        arr[index++] = nums[i];
        sz_arr++;
    }
    free(arr);
    arr = NULL;
    //没有重复的数据返回-1
    return -1;
}
小结:

     每种题目都有好多种解法,往往要想出最优解是不容易的,所以我们要多刷题,锻炼我们的编程思维,相信我们坚持下去会有不一样的收获。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1498065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存