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
andnums2
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)