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.HashSet;
public static void printIntersect(int[] A, int[] B, int n, int m) {
int[] R = new int[n + m];
// 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])) {
// 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])) {
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++)
public static void main(String[] args) {
int[] A = {1, 3, 5, 7, 8, 2};
printIntersect(A, B, A.length, B.length);
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);
}
}
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.HashSet;
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
// Chuyển HashSet qua mảng số nguyên
int[] R = new int[s.size()];
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};
printIntersecSet(A, B, A.length, B.length);
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);
}
}
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/