剑指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;
}
相关推荐
秋说35 分钟前
【数据结构 | C++】整型关键字的平方探测法散列
数据结构·c++·算法
weixin_478689761 小时前
【回溯法】——组合总数
数据结构·python·算法
戊子仲秋1 小时前
【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)
算法·leetcode·深度优先
TaoYuan__3 小时前
机器学习的常用算法
人工智能·算法·机器学习
用户40547878374824 小时前
深度学习笔记 - 使用YOLOv5中的c3模块进行天气识别
算法
十七算法实验室4 小时前
Matlab实现麻雀优化算法优化随机森林算法模型 (SSA-RF)(附源码)
算法·决策树·随机森林·机器学习·支持向量机·matlab·启发式算法
黑不拉几的小白兔4 小时前
PTA部分题目C++重练
开发语言·c++·算法
迷迭所归处4 小时前
动态规划 —— dp 问题-买卖股票的最佳时机IV
算法·动态规划
chordful4 小时前
Leetcode热题100-32 最长有效括号
c++·算法·leetcode·动态规划
_OLi_4 小时前
力扣 LeetCode 459. 重复的子字符串(Day4:字符串)
算法·leetcode·职场和发展·kmp