chore(Java): add merge without extra space for two array (#592)
parent
96c9f520fb
commit
d4b94e4b27
|
@ -10,6 +10,7 @@
|
||||||
- [K-th Element of Two Sorted Arrays](arrays/kth-element--orted-array.java)
|
- [K-th Element of Two Sorted Arrays](arrays/kth-element--orted-array.java)
|
||||||
- [Trapping Rain Water](arrays/trapping-rain-water.java)
|
- [Trapping Rain Water](arrays/trapping-rain-water.java)
|
||||||
- [Ugly Number](arrays/ugly-number.java)
|
- [Ugly Number](arrays/ugly-number.java)
|
||||||
|
- [Merge Without Extra Space](arrays/merge-without-extra-space.java)
|
||||||
|
|
||||||
## Graphs
|
## Graphs
|
||||||
- [Dijkstras](graphs/Dijkstras.java)
|
- [Dijkstras](graphs/Dijkstras.java)
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
// Program to merge two sorted arrays without any extra space in Java
|
||||||
|
/*
|
||||||
|
Author : Suraj Kumar Modi
|
||||||
|
Github : https://github.com/skmodi649
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** Algorithm :
|
||||||
|
* 1) Initialize i,j as n-1,0 where n is size of arr1
|
||||||
|
* 2) Iterate through every element of arr1 and arr2 using two pointers i and j respectively
|
||||||
|
* while(i>=0 && j<m)
|
||||||
|
* if arr1[i] is more than arr2[j]
|
||||||
|
* swap arr1[i] and arr2[j]
|
||||||
|
* else
|
||||||
|
* decrement i
|
||||||
|
* increment j
|
||||||
|
*
|
||||||
|
* 3) Sort both arr1 and arr2
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
class MergingWithoutExtraSpace {
|
||||||
|
// Driver code
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
System.out.println("Enter the sizes of arr1 and arr2 respectively : ");
|
||||||
|
int n = sc.nextInt();
|
||||||
|
int m = sc.nextInt();
|
||||||
|
int[] arr1 = new int[n];
|
||||||
|
int[] arr2 = new int[m];
|
||||||
|
System.out.println("Enter elements in the arr1 : ");
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
arr1[i] = sc.nextInt();
|
||||||
|
}
|
||||||
|
System.out.println("Enter elements in the arr2 : ");
|
||||||
|
for (int i = 0; i < m; i++) {
|
||||||
|
arr2[i] = sc.nextInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Merged array : ");
|
||||||
|
MergingWithoutExtraSpace ob = new MergingWithoutExtraSpace();
|
||||||
|
ob.merge(arr1 , arr2 , n , m);
|
||||||
|
|
||||||
|
StringBuffer str = new StringBuffer();
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
str.append(arr1[i]).append(" ");
|
||||||
|
}
|
||||||
|
for (int i = 0; i < m; i++) {
|
||||||
|
str.append(arr2[i]).append(" ");
|
||||||
|
}
|
||||||
|
System.out.println(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void merge(int[] arr1, int[] arr2, int n, int m) {
|
||||||
|
int i = n-1 , j = 0;
|
||||||
|
while(i>=0 && j<m)
|
||||||
|
{
|
||||||
|
if(arr1[i] > arr2[j])
|
||||||
|
{
|
||||||
|
int temp = arr1[i];
|
||||||
|
arr1[i] = arr2[j];
|
||||||
|
arr2[j] = temp;
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
Arrays.sort(arr1);
|
||||||
|
Arrays.sort(arr2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** TEST CASES :
|
||||||
|
*
|
||||||
|
* Test Case 1 :
|
||||||
|
* Input : n = 3 , m = 4
|
||||||
|
* arr1[] = {1,27,36} arr2[] = {12,14,16,22}
|
||||||
|
* Output :
|
||||||
|
* 1 12 14 16 22 27 36
|
||||||
|
*
|
||||||
|
* Test Case 2 :
|
||||||
|
* Input : n = 4 , m = 5
|
||||||
|
* arr1[] = {0,12,21,27} arr2[] = {4,6,8,10,12}
|
||||||
|
* Output :
|
||||||
|
* 0 4 6 8 10 12 12 21 27
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time Complexity : O((n+m)log(n+m))
|
||||||
|
* Auxiliary Space Complexity : O(1)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue