Dictionary in Python
As a big fan of Hash table in general, the usage of Hash tables in Python, or Dictionary, is also pretty straightforward. This problem illustrates it well: https://leetcode.com/problems/number-of-ways-where-square-of-number-is-equal-to-product-of-two-numbers/
1577. Number of Ways Where Square of Number Is Equal to Product of Two Numbers
Medium
Given two arrays of integers nums1
and nums2
, return the number of triplets formed (type 1 and type 2) under the following rules:
- Type 1: Triplet (i, j, k) if
nums1[i]2 == nums2[j] * nums2[k]
where0 <= i < nums1.length
and0 <= j < k < nums2.length
. - Type 2: Triplet (i, j, k) if
nums2[i]2 == nums1[j] * nums1[k]
where0 <= i < nums2.length
and0 <= j < k < nums1.length
.
Example 1:
Input: nums1 = [7,4], nums2 = [5,2,8,9] Output: 1 Explanation: Type 1: (1,1,2), nums1[1]^2 = nums2[1] * nums2[2]. (4^2 = 2 * 8).
Example 2:
Input: nums1 = [1,1], nums2 = [1,1,1] Output: 9 Explanation: All Triplets are valid, because 1^2 = 1 * 1. Type 1: (0,0,1), (0,0,2), (0,1,2), (1,0,1), (1,0,2), (1,1,2). nums1[i]^2 = nums2[j] * nums2[k]. Type 2: (0,0,1), (1,0,1), (2,0,1). nums2[i]^2 = nums1[j] * nums1[k].
Example 3:
Input: nums1 = [7,7,8,3], nums2 = [1,2,9,7] Output: 2 Explanation: There are 2 valid triplets. Type 1: (3,0,2). nums1[3]^2 = nums2[0] * nums2[2]. Type 2: (3,0,1). nums2[3]^2 = nums1[0] * nums1[1].
Example 4:
Input: nums1 = [4,7,9,11,23], nums2 = [3,5,1024,12,18] Output: 0 Explanation: There are no valid triplets.
Constraints:
1 <= nums1.length, nums2.length <= 1000
1 <= nums1[i], nums2[i] <= 10^5
Accepted
6,704
Submissions
18,737
Since the limits are small, you can solve it in N^2. Push the squares to a dictionary in Python, and go thru the N^2 looking for the keys. Code is below, cheers, ACC.
def numTriplets(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: int """ cache1 = dict() for i in range(len(nums1)): key = nums1[i] * nums1[i] if cache1.get(key) == None: cache1[key] = 1 else: cache1[key] = cache1[key] + 1 cache2 = dict() for i in range(len(nums2)): key = nums2[i] * nums2[i] if cache2.get(key) == None: cache2[key] = 1 else: cache2[key] = cache2[key] + 1 retVal = 0 for i in range(len(nums1)): for j in range(i+1, len(nums1)): key = nums1[i] * nums1[j] if cache2.get(key) != None: retVal += cache2[key] for i in range(len(nums2)): for j in range(i+1, len(nums2)): key = nums2[i] * nums2[j] if cache1.get(key) != None: retVal += cache1[key] return retVal
Comments
Post a Comment