Question
Cosine similarity is a measure of similarity between two vectors of an inner product space that measures the cosine of the angle between them. The cosine of 0° is 1, and it is less than 1 for any other angle.
See wiki: Cosine Similarity
Here is the formula:
Given two vectors A and B with the same size, calculate the cosine similarity.
Return 2.0000 if cosine similarity is invalid (for example A = [0] and B = [0]).
Example
Given A = [1, 2, 3] , B = [2, 3 ,4] .
Return 0.9926 .
Given A = [0] , B = [0] .
Return 2.0000 .
Solution
Java
class Solution {
/**
* @param A: An integer array.
* @param B: An integer array.
* @return: Cosine similarity.
*/
public double cosineSimilarity(int[] A, int[] B) {
if (A.length == 0) { // invalid
return 2d;
}
// write your code here
int abSum = 0;
int a2Sum = 0;
int b2Sum = 0;
for (int i = 0; i < A.length; i++) {
abSum += A[i] * B[i];
a2Sum += A[i] * A[i];
b2Sum += B[i] * B[i];
}
if (a2Sum == 0 || b2Sum == 0) { // invalid
return 2d;
}
return abSum / (Math.sqrt(a2Sum) * Math.sqrt(b2Sum));
}
}