ディレクトリリンク:
Likou プログラミングの質問 - 解決策の概要_共有 + 録音 - CSDN ブログ
GitHub 同期問題解決プロジェクト:
原題リンク:LeetCode 公式サイト - 世界中のオタクに愛されるテクノロジー成長プラットフォーム
説明する:
1 から 9 までの数値のみ nums1
を含む 2 つの配列の合計が与えられています。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
- 各配列の要素は 互いに異なります 。
問題解決のアイデア:
* 問題解決のアイデア:
*以下の原則:
※1. 番号が重複している場合は、1つだけ選択すればよいため、重複している番号が先に選択されます。
※2. 重複がない場合は、2つの配列から最小の値を選択して組み立てます。
コード:
class Solution2605
{
public:
int minNumber(vector<int> &nums1, vector<int> &nums2)
{
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
vector<int> nums3;
for (int i1 : nums1)
{
if (find(nums2.begin(), nums2.end(), i1) != nums2.end())
{
nums3.push_back(i1);
}
}
if (nums3.size() > 0)
{
return nums3[0];
}
int minValue = min(nums1[0], nums2[0]);
int maxValue = max(nums1[0], nums2[0]);
if (minValue == 0)
{
return maxValue * 10;
}
return minValue * 10 + maxValue;
}
};