Count Triplets

  • + 0 comments

    Why is this failing hidden test case 6 :(

    I came up with idea of moving forward and keeping a track of singles and doubles that have happened. This is passing all test cases except test case 6 :(

    static long countTriplets(List<long> arr, long r)
    {
        Dictionary<long, long> singles = new();
        Dictionary<long, long> doubles = new();
        long count = 0;
    
        foreach (var num in arr)
        {
            long keyByr = num / r;
    
            // If num completes a triplet
            if (doubles.ContainsKey(keyByr))
            {
                count += doubles[keyByr];
            }
    
            // If num can be a middle of triplet
            if (singles.ContainsKey(keyByr))
            {
                if (doubles.ContainsKey(num))
                    doubles[num] += singles[keyByr];
                else
                    doubles[num] = singles[keyByr];
            }
    
            // Count num as potential start
            if (singles.ContainsKey(num))
                singles[num]++;
            else
                singles[num] = 1;
        }
    
        return count;
    }