程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)
1. 題目
兩個(gè)(具有不同單詞的)文檔的交集(intersection)中元素的個(gè)數(shù)除以并集(union)中元素的個(gè)數(shù),就是這兩個(gè)文檔的相似度。
例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 個(gè),并集的元素有 5 個(gè)。
給定一系列的長(zhǎng)篇文檔,每個(gè)文檔元素各不相同,并與一個(gè) ID 相關(guān)聯(lián)。它們的相似度非常“稀疏”,也就是說任選 2 個(gè)文檔,相似度都很接近 0。
請(qǐng)?jiān)O(shè)計(jì)一個(gè)算法返回每對(duì)文檔的 ID 及其相似度。只需輸出相似度大于 0 的組合。
請(qǐng)忽略空文檔。為簡(jiǎn)單起見,可以假定每個(gè)文檔由一個(gè)含有不同整數(shù)的數(shù)組表示。
輸入為一個(gè)二維數(shù)組 docs,docs[i] 表示 id 為 i 的文檔。
返回一個(gè)數(shù)組,其中每個(gè)元素是一個(gè)字符串,代表每對(duì)相似度大于 0 的文檔,其格式為 {id1},{id2}: {similarity},其中 id1 為兩個(gè)文檔中較小的 id,similarity 為相似度,精確到小數(shù)點(diǎn)后 4 位。以任意順序返回?cái)?shù)組均可。
示例: 輸入: [[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 的文檔對(duì)數(shù)不會(huì)超過 1000來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sparse-similarity-lcci
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
- 題目說稀疏,最多1000對(duì),考慮相同的 文檔內(nèi)容,后面存儲(chǔ)《含有該內(nèi)容的文檔 id》
- sprintf(res, "%d,%d: %.4f", id1, id2, similarity+1e-9);,精度問題,參考評(píng)論區(qū)+1e-9
- C 庫函數(shù) int sprintf(char *str, const char *format, ...) 發(fā)送格式化輸出到 str 所指向的字符串
- 卡精度例子拿走不客氣
總結(jié)
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1151. 最少交换次
- 下一篇: LeetCode 916. 单词子集(计