Skip to content

2540. Minimum Common Value

Given two integer arrays nums1 and nums2, sorted in non-decreasing order, return the minimum integer common to both arrays. If there is no common integer amongst nums1 and nums2, return -1.

Note that an integer is said to be common to nums1 and nums2 if both arrays have at least one occurrence of that integer.

Example 1:

Input: nums1 = [1,2,3], nums2 = [2,4]
Output: 2
Explanation: The smallest element common to both arrays is 2, so we return 2.

Example 2:

Input: nums1 = [1,2,3,6], nums2 = [2,3,4,5]
Output: 2
Explanation: There are two common elements in the array 2 and 3 out of which 2 is the smallest, so 2 is returned.

Constraints:

  • 1 <= nums1.length, nums2.length <= 105
  • 1 <= nums1[i], nums2[j] <= 109
  • Both nums1 and nums2 are sorted in non-decreasing order.

Solution:

这个题用two pointer 写最好

class Solution {
    public int getCommon(int[] nums1, int[] nums2) {
        Deque<Integer> stack = new ArrayDeque<Integer>();

        for (int i = 0; i < nums1.length; i++){
            stack.offerLast(nums1[i]);
        }

        int result = -1;
        for (int i = 0; i < nums2.length; i++){
            if (stack.isEmpty()){
                break;
            }
            int cur = stack.peekFirst();
            if (cur == nums2[i]){
                result = cur;
                break;
            }else if (cur < nums2[i]){
                while(!stack.isEmpty() && cur < nums2[i]){
                    stack.pollFirst();
                    if (stack.isEmpty()){
                        break;
                    }
                    cur = stack.peekFirst();
                }

                if (cur == nums2[i]){
                    result = cur;
                    break; 
                }
            }else{
                // cur > nums2[i]
                continue;
            }

        }

        return result;
    }
}

// TC: O(n)
// SC: O(n)