DDSA Solutions

Compare two fractions

Time: O(1)
Space: O(1)
Advertisement

Intuition

Compare two fractions a/b and c/d without floating point. Cross multiply: a*d vs c*b.

Algorithm

  1. 1If a*d > b*c: first fraction is larger. If equal: fractions are equal. Else second is larger.

Common Pitfalls

  • Use long multiplication to avoid overflow. Do not divide to decimal — loss of precision.
Compare two fractions.java
Java
// Approach: Cross-multiply to compare a/b vs c/d: compare a*d with c*b.
// Time: O(1) Space: O(1)
class Solution {

    String compareFrac(String str) {
        String[] fractions = str.split(",");

        String[] fraction1 = fractions[0].split("/");
        double a = Double.parseDouble(fraction1[0]);
        double b = Double.parseDouble(fraction1[1]);

        String[] fraction2 = fractions[1].split("/");
        double c = Double.parseDouble(fraction2[0]);
        double d = Double.parseDouble(fraction2[1]);

        double res1 = (a / b);
        double res2 = (c / d);

        if (res1 == res2)
            return "equal";
        else if (res1 > res2)
            return fraction1[0] + "/" + fraction1[1];
        else
            return fraction2[0] + "/" + fraction2[1];
    }
}
Advertisement
Was this solution helpful?