Tags:

Tìm phần tử xuất hiện ở 3 mảng

Tìm một phần tử xuất hiện ở cả 3 mảng. Bạn muốn lấy từng phần tử trong mảng thứ nhất kiểm tra xem xuất hiện trong mảng thứ 2 hay không, nếu có thì lưu lại trong mảng tạm, sau đó lấy mảng tạm đi kiểm tra xem xuất hiện trong mảng thứ 3 hay không? Nếu làm như vậy, bài toán sẽ trở nên rắc rối và rất khó để implement.

Nếu bạn không cẩn thận, kết quả in ra là: 5, 5 thì sai mất tiêu rồi, mỗi phần tử trong mảng thứ nhất duyệt và tìm thấy được trong mảng thứ 2 ngoài lưu lại lại giá thì bạn phải xoá luôn phần tử được tìm thấy trong mảng thứ 2 tránh trường hợp sai như hình ở trên. Kết quả chỉ là 5 thôi nhé  :-).

Mình sẽ làm như này

B1: Sắp xếp 3 mảng tăng dần
B2: khởi tạo i, j, k lần lượt là index của arr1, arr2, arr3
B3: Loop trong khi i < arr.length && j < arr2.lenght && arr3.length
   + If arr1[i] == arr2[j] == arr3[k] thì xuất kết quả
   + Else if arr[i] < arr2[j] thì i++
   + Else if arr[j] < arr[k] j++
   + Else k++

Sau khi bạn đã có 3 mảng được sắp xếp, nếu giá trị tại i, j, k của 3 mảng đều bằng nhau thì xuất ra kết quả. Vì mảng đã được sắp xếp tăng dần, thì nếu arr[i] < arr[j] ta phải tăng giá trị i lên một để lấy giá trị tiếp i + 1 mới có khả năng bằng với arr[j], tương tự cho các trường hợp còn lại.

import java.util.Arrays;

public class Main {
    /**
     * Cho 3 mang, tim cac phan tu xuat hien o ca 3 mang da cho
     */
    public static void main(String[] args) {
        int[] arrOne = {1,4,2,6,7,4};
        int[] arrTwo = {-1, 0, 6, 4};
        int[] arrThree = {4, 2, 0, 7};
        findElementCommon(arrOne, arrTwo, arrThree);
    }

    static void findElementCommon(int[] arrOne, int[] arrTwo, int[] arrThree) {
        // Sort 3 array
        Arrays.sort(arrOne);
        Arrays.sort(arrTwo);
        Arrays.sort(arrThree);
        int i = 0, j = 0, k = 0;
        while (i < arrOne.length && j < arrTwo.length && k < arrThree.length) {
            if (arrOne[i] == arrTwo[j] && arrTwo[j] == arrThree[k]) {
                System.out.println(arrOne[i]);
                i++;
                j++;
                k++;
            } else if (arrOne[i] < arrTwo[j]) {
                i++;
            } else if (arrTwo[j] < arrThree[k]) {
                j++;
            } else {
                k++;
            }
        }
    }
}

Output: 2

Nguồn tham khảo: geeksforgeeks

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