88. Merge Sorted Array


Problem statement:
You are given two integer arrays nums1
and nums2
, sorted in non-decreasing order, and two integers m
and n
, representing the number of elements in nums1
and nums2
respectively.
Merge nums1
and nums2
into a single array sorted in non-decreasing order.
The final sorted array should not be returned by the function, but instead be stored inside the array nums1
. To accommodate this, nums1
has a length of m + n
, where the first m
elements denote the elements that should be merged, and the last n
elements are set to 0
and should be ignored. nums2
has a length of n
.
Logic:
My code:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int k=0;
for(int i = m+1; i <= nums1.length ; i++){
nums1[i] = nums2[k];
k++;
}
return int[] nums1;
}
}
Issues in Your Code:
for (int i = m+1; i <= nums1.length; i++)
:This loop will go out of bounds. Array indices go from
0
tonums1.length - 1
, soi <= nums1.length
is invalid.Also, it should start from
m
, notm+1
.
return int[] nums1;
is:Invalid syntax in Java.
The function return type is
void
, so you should not return anything.
The logic directly copies elements from
nums2
tonums1
without sorting or merging properly.
✅ Correct Approach (Two-Pointer from End):
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=m-1;
int j =n-1;
int k= m+n-1;
while(i>=0 && j>=0){
if(nums1[i]>nums2[j]){
nums1[k] = nums1[i];
k--;
i--;
}
else{
nums1[k] = nums2[j];
k--;
j--;
}
}
while(j>=0){ nums1[k--] = nums2[j--];} // edge case
}
}
Subscribe to my newsletter
Read articles from Dibyashree Chakravarty directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
