《剑指offer》【剑指Offer 03.数组中重复的数字】

🏆个人主页企鹅不叫的博客

​ 🌈专栏

⭐️ 博主码云gitee链接:代码仓库地址

⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!



💎一、题目

🏆1.题目描述

在这里插入图片描述

🏆2.原题链接

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

💎二、解题报告

🏆1.思路分析

🔑思路:

1.最简单的思路是用qsort排序,然后从第二个数开始,每次与前面一个数比较,然后依次两个两个比较
2.映射, ​ 将下标(i)和此时下标对应的值(nums[i])比较,如果不相等则判断此时下标对应的值(nums[i])是否与nums[nums[i]]相等,相等说民找到重复数字,不相等就交换两个数
请添加图片描述

🏆2.时间复杂度

🧡1.O(N2logN)
2.O(N)

🏆3.代码详解

void Swap(int* a, int* b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
//
int findRepeatNumber(int* nums, int numsSize){
    for(int i = 0; i < numsSize; ++i){        //1
        while(nums[i] != i){				  //2
            if(nums[i] == nums[nums[i]]){	  //3
                return nums[i];				  
            }
            Swap(&nums[i], &nums[nums[i]]);   //4
        }
    }
    return -1;
}

// int cmp(const void* e1, const void* e2){
//     return *(int*)e1 - *(int*)e2;
// }
// int findRepeatNumber(int* nums, int numsSize){
//     qsort(nums, numsSize, sizeof(nums[0]), cmp);
//     for(int i = 1; i < numsSize; ++i){
//         if(nums[i-1] == nums[i]){
//             return nums[i];
//         }
//     }
//     return -1;
// }

1.依次遍历循环
2.将nums[i] 与 i比较,相等就下一位
3.nums[i] == nums[nums[i]] 说明找到相同的数了,直接返回就可以了
4.nums[i] != nums[nums[i]]交换两个数即可


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

penguin_bark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值