首页 > 其他分享 >leetcode 面试17.26 稀疏相似度

leetcode 面试17.26 稀疏相似度

时间:2024-12-03 22:54:45浏览次数:7  
标签:pr std int docs 17.26 面试 文档 leetcode size

一个文档可以用某个int集合来表示,两个文档的相似度定义为对应集合的交集大小除以并集大小,例如{1,5,3}与{1,7,2,3}的相似度为0.4。给定n个相似度很稀疏的文档,返回所有相似度大于0的组合。
1<=n<=500, 1<=set[i]<=500

分析:采用类似倒排索引的做法,对集合中的每个int,记录在哪些文档中出现过,然后遍历每个int,对包含该int的文档的两两组成的pair,其交集数加1。最后遍历所有pair统计结果即可。由于题目限定稀疏相似度,pair数很少,时间复度度为O(n^2)。

class Solution {
public:
    vector<string> computeSimilarities(vector<vector<int>>& docs) {
        int n = docs.size();
        std::map<int,std::vector<int>> mp;
        for (int i = 0; i < n; i++) {
            for (auto u : docs[i]) {
                mp[u].push_back(i);
            }
        }
        std::map<std::pair<int,int>,int> cnt;
        for (auto &[k,v] : mp) {
            int m = v.size();
            for (int i = 0; i < m; i++) {
                for (int j = i + 1; j < m; j++) {
                    std::pair<int,int> pr = {v[i], v[j]};
                    cnt[pr] += 1;
                }
            }
        }
        char buf[32];
        std::vector<std::string> ans;
        for (auto &[pr,v] : cnt) {
            int A = v;
            int B = docs[pr.first].size() + docs[pr.second].size() - A;
            sprintf(buf, "%d,%d: %.4f", pr.first, pr.second, 1E-8 + 1.0 * A / B);
            ans.push_back(buf);
        }
        return ans;
    }
};

注意,这里可能会有精度问题,例如,1/32的准确值为0.03125,由于计算机表示精度的原因,实际保存的值可能是0.0312499999或者0.03125000001等,如果是前者,结果就是0.0312,导致错误,因此要加eps。

标签:pr,std,int,docs,17.26,面试,文档,leetcode,size
From: https://www.cnblogs.com/chenfy27/p/18585224

相关文章

  • LeetCode刷题 -- 分治快排
    目录颜色分类题目解析算法原理代码排序数组题目解析算法原理代码数组中第K个最大元素题目解析算法原理代码LCR159.库存管理III题目解析算法原理代码颜色分类题目链接题目解析数组分为三块算法原理1.如果nums[i]==0,++left,i++下标对应元素交换,先+......
  • 2024/12/3 【哈希表】 LeetCode 242.有效的字母异位词 【x】
    题目链接:https://leetcode.cn/problems/valid-anagram/description/解法1:classSolution:defisAnagram(self,s:str,t:str)->bool:record=[0]*26foriins:record[ord(i)-ord('a')]+=1fori......
  • 大厂Java面试经验套路总结
    前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎么准备面试,哪怕是一些工龄比较长的“老开发”:有的人明知道有些问题肯定会被问,面试前还不......
  • 搞定leetcode面试经典150题之哈希算法
    系列博客目录搞定leetcode面试经典150题之哈希算法搞定leetcode面试经典150题之双指针搞定leetcode面试经典150题之滑动窗口文章目录系列博客目录理论知识1.哈希函数(HashFunction)2.哈希表(HashTable)通过HashMap实现3.哈希算法的应用4.哈希算法的时间复杂度编......
  • 大模型面试题:目前大模型中的位置编码有哪些?
    我整理了1000道算法面试题,可以在下面的地方获取,面试题还是有点多的在大模型中,位置编码主要分为两大派:绝对位置编码和相对位置编码。主流的几种脍炙人口的位置编码如下所示:正弦编码正弦曲线(Sinusoidal)位置编码:这是Transformer原始论文中提出的位置编码方式。它通过正弦和......
  • 大模型面试题:当Batch Size增大时,学习率该如何随之变化?
    我整理了1000道算法面试题:获取该问题大答案的理论分析请参考苏剑林的科学空间,地址位于https://kexue.fm/archives/10542说下结论:从方差的角度来分析,有两个角度来说明学习率应该和Batchsize的关系,一个是呈现根号的关系,也即Batchsize增大x倍,学习率增大根号x倍,另一个角度是......
  • SQL面试题——腾讯SQL面试题 连续5天涨幅超过5%的股票
    腾讯SQL面试题连续5天涨幅超过5%的股票今天的面试题目是来自腾讯的,题目的含义很明确了,连续5天涨幅超过5%的股票,我们之前已经做过大量的连续的问题了持续增长我们也可以称之为连续增长,本质上还是连续类的问题,前面我们已经介绍过很多连续的问题了SQL面试题——最大连续登......
  • SQL面试题——腾讯SQL面试题 占据好友封面个数
    腾讯SQL面试题占据好友封面个数有两个表,朋友关系表user_friend,用户步数表user_steps。朋友关系表包含两个字段,用户id,用户好友的id;用户步数表包含两个字段,用户id,用户的步数查询:占据多少个好友的封面(在好友的列表中排行第一,且必须超过好友的步数)--好友关系表+-------+-......
  • 2024/12/2【链表】LeetCode 142 环形链表 II 【X】
    题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/题解链接:https://www.programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC没做出来......
  • 高级java每日一道面试题-2024年12月02日-JVM篇-虚拟机为什么使用元空间替换了永久代?
    如果有遗漏,评论区告诉我进行补充面试官:虚拟机为什么使用元空间替换了永久代?我回答:在Java高级面试中,关于虚拟机为何使用元空间替换了永久代的问题,可以从以下几个方面进行详解:一、背景与概念永久代(PermanentGeneration):内存溢出:永久代的大小是固定的,且默认值较小......