3 정렬된 배열의 공통 요소
3937 단어 javaprogrammingarraybeginners
참고: 추가 데이터 구조를 사용하지 않고 중복을 처리할 수 있습니까?
예 1:
입력:
n1 = 6; A = {1, 5, 10, 20, 40, 80}
n2 = 5; B = {6, 7, 20, 80, 100}
n3 = 8; C = {3, 4, 15, 20, 30, 70, 80, 120}
출력: 20 80
_설명: 20과 80은 유일한
A, B 및 C의 공통 요소.
_
예 2:
입력:
_n1=3; A={3, 3, 3}
n2=3; B={3, 3, 3}
n3=3; C={3, 3, 3}
_출력: 3
이 질문은 MAQ Software, Microsoft, VMWare와 같은 회사에서 제기되었습니다.
이 질문을 해결하려면 여기를 클릭하십시오:( https://practice.geeksforgeeks.org/problems/common-elements1132/1# )
접근 방식 1:
시간 복잡도: O(n1+n2+n3)
공간 복잡도: O(1)
여기에서 우리는 3개의 정렬된 배열을 반복하기 위해 3개의 포인터 i, j, k를 사용했습니다.
import java.util.*;
public class commonEle_in_3sorted {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.print("Enter n1: ");
int n1 = sc.nextInt();
System.out.print("Enter n2: ");
int n2 = sc.nextInt();
System.out.print("Enter n3: ");
int n3 = sc.nextInt();
int[] A = new int[n1];
int[] B = new int[n2];
int[] C = new int[n3];
System.out.println("Enter the elements of the array A: ");
for (int i = 0; i < n1; i++) {
A[i] = sc.nextInt();
}
System.out.println("Enter the elements of the array B: ");
for (int i = 0; i < n2; i++) {
B[i] = sc.nextInt();
}
System.out.println("Enter the elements of the array C: ");
for (int i = 0; i < n3; i++) {
C[i] = sc.nextInt();
}
M1commonElement(A, B, C, n1, n2, n3);
}
public static void M1commonElement(int A[], int B[], int C[], int n1, int n2, int n3) {
int i = 0, j = 0, k = 0;
ArrayList<Integer> al = new ArrayList<>();
while (i < n1 && j < n2 && k < n3) {
if (A[i] == B[j] && A[i] == C[k]) {
al.add(A[i]);// common element
int ele = A[i];
// to remove duplicacy
while (i<n1 && A[i]==ele)
i++;
while (j<n2 && B[j] == ele)
j++;
while (k<n3 && C[k] == ele)
k++;
}
else if (A[i] < B[j])
i++;
else if (B[j] < C[k])
j++;
else
k++;
}
for (int ele : al) {
System.out.println(ele);
}
}
접근 방식 2:
시간 복잡도: O(n1+n2+n3)
공간 복잡도: O(n1+n2+n3)
여기에서 HashMap을 사용하여 3개의 정렬된 배열을 저장합니다. 그런 다음 루프를 다시 반복하고 해당 요소가 HashMap(
hm1
, hm2
, hm3
)에 있는지 확인했습니다. public static void M2commonElement(int A[], int B[], int C[], int n1, int n2, int n3) {
HashMap<Integer, Integer> hm1 = new HashMap<>();
HashMap<Integer, Integer> hm2 = new HashMap<>();
HashMap<Integer, Integer> hm3 = new HashMap<>();
for (int i = 0; i < n1; i++)
hm1.put(A[i], i);
for (int i = 0; i < n2; i++)
hm2.put(B[i], i);
for (int i = 0; i < n3; i++)
hm3.put(C[i], i);
ArrayList<Integer> arr = new ArrayList<>();
for (int i = 0; i < n1; i++) {
if (hm1.containsKey(A[i]) && hm2.containsKey(A[i]) && hm3.containsKey(A[i])) {
arr.add(A[i]);
hm1.remove(A[i]);
}
}
for (int ele : arr)
System.out.print(arr);
}
Reference
이 문제에 관하여(3 정렬된 배열의 공통 요소), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tishaag098/common-element-in-3-sorted-array-2o0c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)