[leetCode 丶 20241118] 2605. 从两个数字数组里生成最小数字
原题:
https://leetcode.cn/problems/form-smallest-number-from-two-digit-arrays/description/
描述:
给你两个只包含 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
- 每个数组中,元素 互不相同 。
个人版答案
执行用时: 2 ms 执行内存消耗: 40.55 M
class Solution { public int minNumber(int[] nums1, int[] nums2) { int[] count = new int[9]; for(int i =0; i < nums1.length;i++){ count[nums1[i] - 1] += 1; } for(int i =0; i< nums2.length;i++){ count[nums2[i] - 1] += 1; } int z = 0; for(int i =0; i< count.length;i++){ if(count[i] == 2){ if(z == 0){ z = i+1; } } } if(z > 0){ return z; } int m1 = Arrays.stream(nums1).min().getAsInt(); int m2 = Arrays.stream(nums2).min().getAsInt(); return 10 * Math.min(m1,m2) + Math.max(m1, m2); } }
优秀解法
执行耗时: 0 ms
class Solution { public int minNumber(int[] nums1, int[] nums2) { int i, min=100, min1=10, min2=10, m; int[] a = new int[11]; for(i=0;i<nums1.length;i++) { a[nums1[i]] = 1; if(nums1[i] < min1){ min1 = nums1[i]; } } for(i=0;i<nums2.length;i++) { if(a[nums2[i]] == 1) { if(min > nums2[i]) { min = nums2[i]; } } if(nums2[i] < min2){ min2 = nums2[i]; } } if(min1*10+min2 > min2*10+min1) { m = min2*10+min1; } else { m = min1*10+min2; } if(min>m){ min = m; } return min; } }
个人解题思路与优秀答案解析
题目分析及个人版思路
- 秒了...合并排序, 取前两个...
- 错了...相同数字当个位数...
- 已知大小, 桶排序. 数量大于2则为交集. 拿最小交集
- 没有交集则获取各个数组中个最小的值, 两个最小值中的最小值当十位数, 另一个则是个位数...
- 没想到这样也会翻车...-_-||
进阶版思路
大合并...天才!!!
嗯? 好像很简单!
唉? 怎么和我想的不太一样?
啧, 问题不大,改改.
哎! 算了, 我不会.
打卡
打卡
天才!!!
打卡