Tìm phần hợp của 2 mảng

Cho 2 mảng số nguyên A và có có n và m phần tử. Mỗi phần tử là duy nhất trong 2 mảng A và B. Tìm phần hợp của 2 mảng và in ra mảng kết quả R đã được sắp xếp, các phần tử trong R phải là duy nhất. n, m > 0

Ví dụ

Input: A[] = {1, 3, 5, 7, 8, 2}, B = {3, 4, 0, 2}
Output: R[] = {0, 1, 2, 3, 4, 5, 7, 8}

Cách 1: Vòng lặp

Các bước làm

B1: Khởi tạo mảng R[m + n], index = 0
B2: Loop mảng A, với mỗi phần tử trong A nếu chưa có trong R thì thêm vào R
B3: Tương tự B2 để thực hiện với B
B4: Sắp xếp mảng
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Main {

    public static void printIntersect(int[] A, int[] B, int n, int m) {
        int[] R = new int[n + m];
        int index = 0;
        // Lấy những phần tử trong A mà chưa có trong R
        for (int i = 0; i < n; i++) {
            if (!isPresent(R, index, A[i])) {
                R[index] = A[i];
                index++;
            }
        }

        // Lấy những phần tử trong B  mà chưa có trong R
        for (int i = 0; i < m; i++) {
            if (!isPresent(R, index, B[i])) {
                R[index] = B[i];
                index++;
            }
        }

        // Sắp xếp mảng
        Arrays.sort(R, 0, index);
        for(int i = 0; i < index; i++){
            System.out.print(R[i] + " ");
        }

    }

    public static boolean isPresent(int[] arr, int n, int x) {
        for (int i = 0; i < n; i++)
            if (arr[i] == x)
                return true;
        return false;
    }

    public static void main(String[] args) {
        int[] A = {1, 3, 5, 7, 8, 2};
        int[] B = {3, 4, 0, 2};
        printIntersect(A, B, A.length, B.length);
    }
}

Output: 0 1 2 3 4 5 7 8 

Độ phức tạp: O(n^2)

Cách 2: Sử dụng Set 

Thêm các phần tử của mảng A, B vào Set. Sau đó convert Set sang mảng và sắp xếp mảng.

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Main {

    public static void printIntersecSet(int[] A, int[] B, int n, int m) {
        Set<Integer> s = new HashSet<>();

        // Thêm tất cả các phần tử vào HashSet
        for (int item : A)
            s.add(item);

        for(int item : B)
            s.add(item);

        // Chuyển HashSet qua mảng số nguyên
        int[] R = new int[s.size()];
        int k = 0;
        for (int item: s)
            R[k++] = item;

        // Sắp xếp mảng
        Arrays.sort(R);

        for(int i = 0; i < s.size(); i++){
            System.out.print(R[i] + " ");
        }
    }

    public static void main(String[] args) {
        int[] A = {1, 3, 5, 7, 8, 2};
        int[] B = {3, 4, 0, 2};
        printIntersecSet(A, B, A.length, B.length);
    }
}

Output: 0 1 2 3 4 5 7 8 

Độ phức tạp: O(nlogn)

Link đề: https://www.geeksforgeeks.org/find-union-and-intersection-of-two-unsorted-arrays/

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x