LeetCode算法面试题汇总
合并两个有序数组
一开始想着利用System.arraycopy()+Arrays.sort()简单地实现,没想到太low了就换了一种方法。既然她已经是有序的,那么利用它的这个特性,我们就可以省了再次排序的浪费,直接将nums2中的数通过比较放到nums1中。
1.System.arraycopy()方法
(1) 解析
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
其中:
src是源数组
srcPos是源数组复制的起始位置
dest是目标数组
destPos是目标数组接收复制数据的起始位置
length是复制的长度(源数组中从复制起始位置srcPos开始需要复制的长度)
可以看到,该方法是本地方法,我们不能更深一步的了解其中的原理,但是我们可以知道其作用就是将源数组从起始位置srcPos开始将length长度的元素复制到目标数组,目标数组从destPos位置开始接收复制元素。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index1=m-1;
int index2=n-1;
int index=m+n-1;
while(index1>=0 || index2>=0)
{
if(index1>=0&&index2<0) break;
else if(index1<0&&index2>=0) nums1[index--]=nums2[index2--];
else if(nums1[index1]>nums2[index2]) nums1[index--]=nums1[index1--];
else nums1[index--]=nums2[index2--];
}
}
}