剑指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;
}
相关推荐
Imxyk1 天前
P9244 [蓝桥杯 2023 省 B] 子串简写
数据结构·c++·算法
colus_SEU1 天前
SVM 面试题总结
算法·机器学习·支持向量机
INGNIGHT1 天前
373. 查找和最小的 k 对数字(堆priority_queue)
算法
ambition202421 天前
深度优先搜索(DFS)与回溯算法详解:以全排列问题为例
算法·深度优先
Omics Pro1 天前
马普所:生命蛋白质宇宙聚类
数据库·人工智能·算法·机器学习·数据挖掘·aigc·聚类
汀、人工智能1 天前
[特殊字符] 第106课:旋转图像
数据结构·算法·矩阵·数据库架构·数组·旋转图像
ulias2121 天前
leetcode热题 - 2
算法·leetcode·职场和发展
Ivanqhz1 天前
SMT(Satisfiability Modulo Theories,基于模理论的可满足性)
人工智能·算法·机器学习
游乐码1 天前
C#Dicitionary
算法·c#
华清远见IT开放实验室1 天前
AI 算法核心知识清单(深度实战版1)
人工智能·python·深度学习·学习·算法·机器学习·ai