[leetCode 丶 20241118] 2605. 从两个数字数组里生成最小数字
原题: 2605.从两个数字数组里生成最小数字
描述:
给你两个只包含 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则为交集. 拿最小交集
- 没有交集则获取各个数组中个最小的值, 两个最小值中的最小值当十位数, 另一个则是个位数...
- 没想到这样也会翻车...-_-||
进阶版思路
大合并...天才!!!
嗯? 好像很简单!
唉? 怎么和我想的不太一样?
啧, 问题不大,改改.
哎! 算了, 我不会.
打卡
打卡
天才!!!
打卡