LeetCode 1213. Intersection of Three Sorted Arrays

原题链接在这里:https://leetcode.com/problems/intersection-of-three-sorted-arrays/

题目:

Given three integer arrays arr1arr2 and arr3 sorted in strictly increasing order, return a sorted array of only the integers that appeared in all three arrays.

Example 1:

Input: arr1 = [1,2,3,4,5], arr2 = [1,2,5,7,9], arr3 = [1,3,4,5,8]
Output: [1,5]
Explanation: Only 1 and 5 appeared in the three arrays.

Constraints:

  • 1 <= arr1.length, arr2.length, arr3.length <= 1000
  • 1 <= arr1[i], arr2[i], arr3[i] <= 2000

题解:

Have 3 pointers pointing to 3 arrays.

If 3 pointed values are the same, add it to res and move all 3 pointers.

Else if first value < second value, move 1st pointer.

Else if second value < third value, now first value must be >= second value, need to move 2nd pointer.

Else move the 3rd pointer, since noew first value >= second value and second value >= third value.

Time Complexity: O(n). n = sum of array lengths.

Space: O(1).

AC Java:

 1 class Solution {
 2     public List<Integer> arraysIntersection(int[] arr1, int[] arr2, int[] arr3) {
 3         List<Integer> res = new ArrayList<>();
 4         if(arr1 == null || arr2 == null || arr3 == null){
 5             return res;
 6         }
 7         
 8         int i = 0;
 9         int j = 0;
10         int k = 0;
11         while(i < arr1.length && j < arr2.length && k < arr3.length){
12             if(arr1[i] == arr2[j] && arr1[i] == arr3[k]){
13                 res.add(arr1[i]);
14                 i++;
15                 j++;
16                 k++;
17             }else if(arr1[i] < arr2[j]){
18                 i++;
19             }else if(arr2[j] < arr3[k]){
20                 j++;
21             }else{
22                 k++;
23             }
24         }
25         
26         return res;
27     }
28 }

类似Intersection of Two Arrays.

原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12047372.html