diff --git a/README.md b/README.md index d848cbf30..762dfd825 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ LeetCode |1734|[Decode XORed Permutation](https://leetcode.com/problems/decode-xored-permutation/) | [C++](./algorithms/cpp/decodeXORedPermutation/DecodeXoredPermutation.cpp)|Medium| |1733|[Minimum Number of People to Teach](https://leetcode.com/problems/minimum-number-of-people-to-teach/) | [C++](./algorithms/cpp/minimumNumberOfPeopleToTeach/MinimumNumberOfPeopleToTeach.cpp)|Medium| |1732|[Find the Highest Altitude](https://leetcode.com/problems/find-the-highest-altitude/) | [C++](./algorithms/cpp/findTheHighestAltitude/FindTheHighestAltitude.cpp)|Easy| +|1726|[Tuple with Same Product](https://leetcode.com/problems/tuple-with-same-product/) | [C++](./algorithms/cpp/tupleWithSameProduct/TupleWithSameProduct.cpp)|Medium| |1725|[Number Of Rectangles That Can Form The Largest Square](https://leetcode.com/problems/number-of-rectangles-that-can-form-the-largest-square/) | [C++](./algorithms/cpp/numberOfRectanglesThatCanFormTheLargestSquare/NumberOfRectanglesThatCanFormTheLargestSquare.cpp)|Easy| |1718|[Construct the Lexicographically Largest Valid Sequence](https://leetcode.com/problems/construct-the-lexicographically-largest-valid-sequence/) | [C++](./algorithms/cpp/constructTheLexicographicallyLargestValidSequence/ConstructTheLexicographicallyLargestValidSequence.cpp)|Medium| |1717|[Maximum Score From Removing Substrings](https://leetcode.com/problems/maximum-score-from-removing-substrings/) | [C++](./algorithms/cpp/maximumScoreFromRemovingSubstrings/MaximumScoreFromRemovingSubstrings.cpp)|Medium| diff --git a/algorithms/cpp/tupleWithSameProduct/TupleWithSameProduct.cpp b/algorithms/cpp/tupleWithSameProduct/TupleWithSameProduct.cpp new file mode 100644 index 000000000..10ca073af --- /dev/null +++ b/algorithms/cpp/tupleWithSameProduct/TupleWithSameProduct.cpp @@ -0,0 +1,61 @@ +// Source : https://leetcode.com/problems/tuple-with-same-product/ +// Author : Hao Chen +// Date : 2021-04-27 + +/***************************************************************************************************** + * + * Given an array nums of distinct positive integers, return the number of tuples (a, b, c, d) such + * that a * b = c * d where a, b, c, and d are elements of nums, and a != b != c != d. + * + * Example 1: + * + * Input: nums = [2,3,4,6] + * Output: 8 + * Explanation: There are 8 valid tuples: + * (2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3) + * (3,4,2,6) , (4,3,2,6) , (3,4,6,2) , (4,3,6,2) + * + * Example 2: + * + * Input: nums = [1,2,4,5,10] + * Output: 16 + * Explanation: There are 16 valids tuples: + * (1,10,2,5) , (1,10,5,2) , (10,1,2,5) , (10,1,5,2) + * (2,5,1,10) , (2,5,10,1) , (5,2,1,10) , (5,2,10,1) + * (2,10,4,5) , (2,10,5,4) , (10,2,4,5) , (10,2,4,5) + * (4,5,2,10) , (4,5,10,2) , (5,4,2,10) , (5,4,10,2) + * + * Example 3: + * + * Input: nums = [2,3,4,6,8,12] + * Output: 40 + * + * Example 4: + * + * Input: nums = [2,3,5,7] + * Output: 0 + * + * Constraints: + * + * 1 <= nums.length <= 1000 + * 1 <= nums[i] <= 10^4 + * All elements in nums are distinct. + ******************************************************************************************************/ + +class Solution { +public: + int tupleSameProduct(vector& nums) { + unordered_map stat; + for(int i = 0; i < nums.size(); i++) { + for ( int j = i+1; j < nums.size(); j++) { + stat[nums[i]*nums[j]]++; + } + } + + int result = 0; + for ( auto [n, cnt] : stat) { + if (cnt > 1) result += cnt*2 * (cnt-1)*2; + } + return result; + } +};