程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)
生活随笔
收集整理的這篇文章主要介紹了
程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
兩個(具有不同單詞的)文檔的交集(intersection)中元素的個數除以并集(union)中元素的個數,就是這兩個文檔的相似度。
例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 個,并集的元素有 5 個。
給定一系列的長篇文檔,每個文檔元素各不相同,并與一個 ID 相關聯。它們的相似度非常“稀疏”,也就是說任選 2 個文檔,相似度都很接近 0。
請設計一個算法返回每對文檔的 ID 及其相似度。只需輸出相似度大于 0 的組合。
請忽略空文檔。為簡單起見,可以假定每個文檔由一個含有不同整數的數組表示。
輸入為一個二維數組 docs,docs[i] 表示 id 為 i 的文檔。
返回一個數組,其中每個元素是一個字符串,代表每對相似度大于 0 的文檔,其格式為 {id1},{id2}: {similarity},其中 id1 為兩個文檔中較小的 id,similarity 為相似度,精確到小數點后 4 位。以任意順序返回數組均可。
示例: 輸入: [[14, 15, 100, 9, 3],[32, 1, 9, 3, 5],[15, 29, 2, 6, 8, 7],[7, 10] ] 輸出: ["0,1: 0.2500","0,2: 0.1000","2,3: 0.1429" ]提示: docs.length <= 500 docs[i].length <= 500 相似度大于 0 的文檔對數不會超過 1000來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sparse-similarity-lcci
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 題目說稀疏,最多1000對,考慮相同的 文檔內容,后面存儲《含有該內容的文檔 id》
- sprintf(res, "%d,%d: %.4f", id1, id2, similarity+1e-9);,精度問題,參考評論區+1e-9
- C 庫函數 int sprintf(char *str, const char *format, ...) 發送格式化輸出到 str 所指向的字符串
- 卡精度例子拿走不客氣
總結
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1151. 最少交换次
- 下一篇: LeetCode 916. 单词子集(计