LeetCode 2605. Form Smallest Number From Two Digit Arrays Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
2605. Form Smallest Number From Two Digit Arrays

Description

Given two arrays of unique digits nums1 and nums2, return the smallest number that contains at least one digit from each array.

 

Example 1:

Input: nums1 = [4,1,3], nums2 = [5,7]
Output: 15
Explanation: The number 15 contains the digit 1 from nums1 and the digit 5 from nums2. It can be proven that 15 is the smallest number we can have.

Example 2:

Input: nums1 = [3,5,2,6], nums2 = [3,1,7]
Output: 3
Explanation: The number 3 contains the digit 3 which exists in both arrays.

 

Constraints:

  • 1 <= nums1.length, nums2.length <= 9
  • 1 <= nums1[i], nums2[i] <= 9
  • All digits in each array are unique.

Solutions

Solution 1: Enumeration

We observe that if there are the same numbers in the arrays nums1 and nums2, then the minimum of the same numbers is the smallest number. Otherwise, we take the number a in the array nums1 and the number b in the array nums2, and concatenate the two numbers a and b into two numbers, and take the smaller number.

The time complexity is O(m × n), and the space complexity is O(1), where m and n are the lengths of the arrays nums1 and nums2.

PythonJavaC++GoTypeScriptRust
class Solution: def minNumber(self, nums1: List[int], nums2: List[int]) -> int: ans = 100 for a in nums1: for b in nums2: if a == b: ans = min(ans, a) else: ans = min(ans, 10 * a + b, 10 * b + a) return ans(code-box)

Solution 2: Hash Table or Array + Enumeration

We can use a hash table or array to record the numbers in the arrays nums1 and nums2, and then enumerate 1 \sim 9. If i appears in both arrays, then i is the smallest number. Otherwise, we take the number a in the array nums1 and the number b in the array nums2, and concatenate the two numbers a and b into two numbers, and take the smaller number.

The time complexity is (m + n), and the space complexity is O(C). Where m and n are the lengths of the arrays nums1 and nums2 respectively; and C is the range of the numbers in the arrays nums1 and nums2, and the range in this problem is C = 10.

PythonJavaC++GoTypeScriptRust
class Solution: def minNumber(self, nums1: List[int], nums2: List[int]) -> int: s = set(nums1) & set(nums2) if s: return min(s) a, b = min(nums1), min(nums2) return min(a * 10 + b, b * 10 + a)(code-box)

Solution 3: Bit Operation

Since the range of the numbers is 1 \sim 9, we can use a binary number with a length of 10 to represent the numbers in the arrays nums1 and nums2. We use mask1 to represent the numbers in the array nums1, and use mask2 to represent the numbers in the array nums2.

If the number mask obtained by performing a bitwise AND operation on mask1 and mask2 is not equal to 0, then we extract the position of the last 1 in the number mask, which is the smallest number.

Otherwise, we extract the position of the last 1 in mask1 and mask2 respectively, and denote them as a and b, respectively. Then the smallest number is min(a × 10 + b, b × 10 + a).

The time complexity is O(m + n), and the space complexity is O(1). Where m and n are the lengths of the arrays nums1 and nums2 respectively.

PythonJavaC++GoTypeScript
class Solution: def minNumber(self, nums1: List[int], nums2: List[int]) -> int: mask1 = mask2 = 0 for x in nums1: mask1 |= 1 << x for x in nums2: mask2 |= 1 << x mask = mask1 & mask2 if mask: return (mask & -mask).bit_length() - 1 a = (mask1 & -mask1).bit_length() - 1 b = (mask2 & -mask2).bit_length() - 1 return min(a * 10 + b, b * 10 + a)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !