LeetCode 每日一题笔记 日期:2026.05.19 题目:2540. 最小公共值

发布时间:2026/5/20 0:53:03

LeetCode 每日一题笔记 日期:2026.05.19 题目:2540. 最小公共值 LeetCode 每日一题笔记0. 前言日期2026.05.19题目2540. 最小公共值难度简单标签数组、双指针、哈希表1. 题目理解问题描述给定两个按非降序排序的整数数组nums1和nums2请返回它们的最小公共整数。如果不存在公共整数则返回-1。示例输入nums1 [1,2,3],nums2 [2,4]输出2解释两个数组的最小公共元素是 2。输入nums1 [1,2,3,6],nums2 [2,3,4,5]输出2解释两个数组的公共元素是 2 和 3其中 2 是较小值。2. 解题思路核心观察两数组已按非降序排序可使用双指针高效遍历类似归并排序的合并过程利用数组的有序性只需一次遍历即可找到第一个公共元素即最小公共值也可使用哈希表但会牺牲有序性带来的性能优势且空间复杂度更高。算法步骤初始化双指针i和j分别指向nums1和nums2的起始位置比较nums1[i]和nums2[j]若相等直接返回该值有序数组中第一个相等值即为最小值若nums1[i] nums2[j]移动j指针若nums1[i] nums2[j]移动i指针遍历结束未找到公共值返回-1。3. 代码实现packagelc2540;importjava.util.HashSet;publicclassSolution{publicintgetCommon(int[]nums1,int[]nums2){HashSetIntegersetnewHashSet();if(nums1.lengthnums2.length){for(intnum:nums2){set.add(num);}for(intnum:nums1){if(set.contains(num)){returnnum;}}}else{for(intnum:nums1){set.add(num);}for(intnum:nums1){if(set.contains(num)){returnnum;}}}return-1;}}4. 代码优化说明减少了分支判断直接利用双指针遍历有序数组避免了哈希表的额外空间开销代码更简洁高效packagelc2540;publicclassSolution{publicintgetCommon(int[]nums1,int[]nums2){inti0,j0;while(inums1.lengthjnums2.length){if(nums1[i]nums2[j]){returnnums1[i];}if(nums1[i]nums2[j]){i;}else{j;}}return-1;}}5. 复杂度分析时间复杂度O(nm)O(n m)O(nm)双指针遍历两个数组每个元素最多被访问一次。空间复杂度O(1)O(1)O(1)仅使用常数级额外空间无哈希表等数据结构开销。6. 总结核心思路是双指针遍历有序数组利用数组的非降序特性直接找到第一个公共元素优化后的双指针解法时间和空间复杂度均优于哈希表解法是本题最优方案关键技巧有序数组的双指针遍历是解决此类问题的经典方法避免了额外的空间开销和分支判断。

相关新闻