剑指offer03:数组中重复的数组---leetcode:LCR 120. 寻找文件副本

设备中存有 n 个文件,文件 id 记于数组 documents。若文件 id 相同,则定义为该文件存在副本。请返回任一存在副本的文件 id

示例 1:

复制代码
输入:documents = [2, 5, 3, 0, 5, 0]
输出:0 或 5

提示:

  • 0 ≤ documents[i] ≤ n-1
  • 2 <= n <= 100000

思路,排序之后再看,原本以为是要返回重复的数组,打算用一个空数组做标记,结果只需返回一个重复的即可。

使用排序后的数组,找挨着的两个即可。排序的时间复杂度是O(nlogn),而找到重复元素的时间复杂度是O(n)。

cpp 复制代码
int compare(const void* a,const void* b){
    return *(int*)a-*(int*)b;
}
int findRepeatDocument(int* documents, int documentsSize) {
    qsort(documents,documentsSize,sizeof(int),compare);
    for(int i=0;i<documentsSize-1;i++){
        int j=1;
        if(documents[i]==documents[i+j]){
            return documents[i];
        }
    }
    return 0;
}

使用哈希,使用数组中的值作为下标,进行标记。防止数组中值溢出,使用取余的办法。

cpp 复制代码
int findRepeatDocument(int* documents, int documentsSize){
    int* hash=(int*)malloc(documentsSize*sizeof(int));
    for (int i = 0; i < documentsSize; i++) {
        hash[i] =-1;
    }
    for(int i = 0; i < documentsSize; i++){
        int p=documents[i]%documentsSize;
        if(hash[p]!=-1){
            return documents[i];
        }
        hash[documents[i]%documentsSize]=documents[i];
    }
    return 0;
}
相关推荐
吃着火锅x唱着歌10 分钟前
LeetCode 739.每日温度
算法·leetcode·职场和发展
如竟没有火炬11 分钟前
去除重复字母——贪心+单调栈
开发语言·数据结构·python·算法·leetcode·深度优先
薛定e的猫咪22 分钟前
【ICML 2025】MODULI:基于扩散模型解锁离线多目标强化学习的偏好泛化
人工智能·学习·算法·机器学习
Brilliantwxx24 分钟前
【C++】priority_queue以及 仿函数 的学习
开发语言·c++·笔记·学习·算法
风味蘑菇干25 分钟前
斗地主案例
java·数据结构·算法
洛水水1 小时前
【力扣100题】39.二叉树的最近公共祖先
算法·leetcode·职场和发展
无敌昊哥战神1 小时前
【LeetCode 134】加油站:图解指针跳跃与 O(N) 极简贪心,避开 Python 隐藏坑!
c语言·python·算法·leetcode
人道领域1 小时前
【LeetCode刷题日记】222.极速计算完全二叉树节点数:O(log²n)算法揭秘
java·数据结构·算法·leetcode·深度优先
目黑live +wacyltd1 小时前
算法备案的实操指南(含截图示例)
人工智能·算法·llm·大模型备案·算法备案
小糯米6011 小时前
C语言 指针4
c语言·数据结构·算法