class Solution {
public:
int minNumber(vector<int>& nums1, vector<int>& nums2) {
}
};
6327. 从两个数字数组里生成最小数字
给你两个只包含 1 到 9 之间数字的数组nums1
和 nums2
,每个数组中的元素 互不相同 ,请你返回 最小 的数字,两个数组都 至少 包含这个数字的某个数位。
示例 1:
输入:nums1 = [4,1,3], nums2 = [5,7] 输出:15 解释:数字 15 的数位 1 在 nums1 中出现,数位 5 在 nums2 中出现。15 是我们能得到的最小数字。
示例 2:
输入:nums1 = [3,5,2,6], nums2 = [3,1,7] 输出:3 解释:数字 3 的数位 3 在两个数组中都出现了。
提示:
1 <= nums1.length, nums2.length <= 9
1 <= nums1[i], nums2[i] <= 9
原站题解
php 解法, 执行用时: 0 ms, 内存消耗: 18.7 MB, 提交时间: 2023-09-05 07:42:09
class Solution { /** * @param Integer[] $nums1 * @param Integer[] $nums2 * @return Integer */ function minNumber($nums1, $nums2) { usort($nums1, function($a, $b) { return $a > $b ? 1 : -1; }); usort($nums2, function($a, $b) { return $a > $b ? 1 : -1; }); for ( $i = 1; $i <= 9; $i++ ) { if ( in_array($i, $nums1) && in_array($i, $nums2) ) return $i; } return min($nums1[0] * 10 + $nums2[0], $nums1[0] + $nums2[0] * 10); } }
javascript 解法, 执行用时: 64 ms, 内存消耗: 42.3 MB, 提交时间: 2023-04-02 11:18:41
/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number} */ var minNumber = function(nums1, nums2) { nums1.sort((a, b) => a - b); nums2.sort((a, b) => a - b); for (let i = 1; i <= 9; i++) { if (nums1.includes(i) && nums2.includes(i)) { return i; } } return Math.min(nums1[0] * 10 + nums2[0], nums2[0] * 10 + nums1[0]); };
golang 解法, 执行用时: 4 ms, 内存消耗: 2 MB, 提交时间: 2023-04-02 11:17:43
// 位运算 func minNumber(nums1, nums2 []int) int { var mask1, mask2 uint for _, x := range nums1 { mask1 |= 1 << x } for _, x := range nums2 { mask2 |= 1 << x } if m := mask1 & mask2; m > 0 { return bits.TrailingZeros(m) } x, y := bits.TrailingZeros(mask1), bits.TrailingZeros(mask2) return min(x*10+y, y*10+x) } func min(a, b int) int { if b < a { return b }; return a }
cpp 解法, 执行用时: 4 ms, 内存消耗: 21.2 MB, 提交时间: 2023-04-02 11:17:20
class Solution { public: int minNumber(vector<int> &nums1, vector<int> &nums2) { int mask1 = 0, mask2 = 0; for (int x: nums1) mask1 |= 1 << x; for (int x: nums2) mask2 |= 1 << x; int m = mask1 & mask2; if (m) return __builtin_ctz(m); int x = __builtin_ctz(mask1), y = __builtin_ctz(mask2); return min(x * 10 + y, y * 10 + x); } };
java 解法, 执行用时: 0 ms, 内存消耗: 39.6 MB, 提交时间: 2023-04-02 11:17:08
class Solution { public int minNumber(int[] nums1, int[] nums2) { int mask1 = 0, mask2 = 0; for (int x : nums1) mask1 |= 1 << x; for (int x : nums2) mask2 |= 1 << x; int m = mask1 & mask2; if (m > 0) return Integer.numberOfTrailingZeros(m); int x = Integer.numberOfTrailingZeros(mask1); int y = Integer.numberOfTrailingZeros(mask2); return Math.min(x * 10 + y, y * 10 + x); } }
python3 解法, 执行用时: 36 ms, 内存消耗: 15 MB, 提交时间: 2023-04-02 11:16:53
''' 有交集,则取最小的交集,否则取两个数组中各自的最小数 ''' class Solution: def minNumber(self, nums1: List[int], nums2: List[int]) -> int: s1, s2 = set(nums1), set(nums2) s = s1 & s2 if s: return min(s) x, y = min(nums1), min(nums2) return min(x * 10 + y, y * 10 + x)