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