Find First Intersection Point Between Two Sorted Arrays
EasyUpdated: Sep 1, 2025
Problem
Given two sorted arrays nums1 and nums2, find the first intersection point (the smallest common element) between them. If there is no common element, return -1.
Examples
Example 1
Input:
nums1 = [1, 2, 3, 6, 8, 10]
nums2 = [4, 5, 6, 11, 15, 20]
Output: 6
Explanation: 6 is the first element present in both arrays.
Example 2
Input:
nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
Output: -1
Explanation: There is no common element.
Solution
Method 1 – Brute Force (Nested Loops)
Intuition
Compare every element of the first array with every element of the second array. Return the first match found.
Approach
- For each element in
nums1, check all elements innums2. - If a match is found, return that element.
- If no match is found, return -1.
Code
C++
class Solution {
public:
int intersectionPoint(vector<int>& nums1, vector<int>& nums2) {
for (int x : nums1) {
for (int y : nums2) {
if (x == y) return x;
}
}
return -1;
}
};
Go
func intersectionPoint(nums1, nums2 []int) int {
for _, x := range nums1 {
for _, y := range nums2 {
if x == y {
return x
}
}
}
return -1
}
Java
class Solution {
public int intersectionPoint(int[] nums1, int[] nums2) {
for (int x : nums1) {
for (int y : nums2) {
if (x == y) return x;
}
}
return -1;
}
}
Kotlin
class Solution {
fun intersectionPoint(nums1: IntArray, nums2: IntArray): Int {
for (x in nums1) {
for (y in nums2) {
if (x == y) return x
}
}
return -1
}
}
Python
class Solution:
def intersection_point(self, nums1: list[int], nums2: list[int]) -> int:
for x in nums1:
for y in nums2:
if x == y:
return x
return -1
Rust
impl Solution {
pub fn intersection_point(nums1: &[i32], nums2: &[i32]) -> i32 {
for &x in nums1 {
for &y in nums2 {
if x == y {
return x;
}
}
}
-1
}
}
Complexity
- ⏰ Time complexity:
O(n * m), wherenandmare the lengths of the two arrays. Every pair is compared. - 🧺 Space complexity:
O(1), no extra space used.
Method 2 – Two Pointers (Efficient)
Intuition
Since both arrays are sorted, we can use two pointers to efficiently find the first common element.
Approach
- Initialize two pointers,
iandj, at the start ofnums1andnums2. - While both pointers are within bounds:
- If
nums1[i] == nums2[j], returnnums1[i]. - If
nums1[i] < nums2[j], incrementi. - If
nums1[i] > nums2[j], incrementj.
- If no intersection is found, return -1.
Code
C++
class Solution {
public:
int intersectionPoint(vector<int>& nums1, vector<int>& nums2) {
int i = 0, j = 0;
while (i < nums1.size() && j < nums2.size()) {
if (nums1[i] == nums2[j]) return nums1[i];
else if (nums1[i] < nums2[j]) ++i;
else ++j;
}
return -1;
}
};
Go
func intersectionPoint(nums1, nums2 []int) int {
i, j := 0, 0
for i < len(nums1) && j < len(nums2) {
if nums1[i] == nums2[j] {
return nums1[i]
} else if nums1[i] < nums2[j] {
i++
} else {
j++
}
}
return -1
}
Java
class Solution {
public int intersectionPoint(int[] nums1, int[] nums2) {
int i = 0, j = 0;
while (i < nums1.length && j < nums2.length) {
if (nums1[i] == nums2[j]) return nums1[i];
else if (nums1[i] < nums2[j]) i++;
else j++;
}
return -1;
}
}
Kotlin
class Solution {
fun intersectionPoint(nums1: IntArray, nums2: IntArray): Int {
var i = 0
var j = 0
while (i < nums1.size && j < nums2.size) {
when {
nums1[i] == nums2[j] -> return nums1[i]
nums1[i] < nums2[j] -> i++
else -> j++
}
}
return -1
}
}
Python
class Solution:
def intersection_point(self, nums1: list[int], nums2: list[int]) -> int:
i, j = 0, 0
while i < len(nums1) and j < len(nums2):
if nums1[i] == nums2[j]:
return nums1[i]
elif nums1[i] < nums2[j]:
i += 1
else:
j += 1
return -1
Rust
impl Solution {
pub fn intersection_point(nums1: &[i32], nums2: &[i32]) -> i32 {
let (mut i, mut j) = (0, 0);
while i < nums1.len() && j < nums2.len() {
if nums1[i] == nums2[j] {
return nums1[i];
} else if nums1[i] < nums2[j] {
i += 1;
} else {
j += 1;
}
}
-1
}
}
Complexity
- ⏰ Time complexity:
O(n + m), wherenandmare the lengths of the two arrays. Each element is checked at most once. - 🧺 Space complexity:
O(1), only pointers are used.