• 掘金团队号上线,助你 Offer 临门! 点击 检查活动概况

本题中心

每天一道简略算法,防止老年痴呆~

标题描绘

给你两个有序整数数组nums1nums2数组,请你将 nums2 合并到nums1中,使 nums1 成为一算法的五个特性个有序数组。

初始化nums1nums2 的元素数量分别为mn 。你可以假定nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。

示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6算法是什么], n = 3
输出:[1,2算法工程师和程序员差异,2,3,5,6]
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示:
num算法剖析的意图是s1.length == m + n
nums2.length == n算法的时刻复杂度取决于
0 <= m, n <= 200
1 <= m + n算法的五个特性 <= 200
-109 <= nums1数组公式[i], nums2[i] <= 109

解题思路

最简略方法,遍历nums数组和链表的差异1数组,然后往里刺进nums2数组的值算法工程师和程序员差异

双指针: 根据标题提示nums1和nums2是两个已排序的数组,那么可以利数组去重用这个用双指针完结O(m+n)时刻复杂度,O(m+n)空间复杂度的算法。

反向双指针:标题中还提示给出nums1后半部分算法的五个特性算法工程师n长度都是空的,算法的有穷性是指那么可以算法是什么双指针倒序进行比较插值。完结
O(1)的空间复杂度。

解题代码

暴力简略解

public void merge(int[算法工程师] nums1, int m, in数组的界说t[] n算法工程师ums2, int n) {
for(int i=0;i<m+n;i++){
if(i>=m){
nums1[i]=nums2[i-m];
}
}
A算法是什么rrays.sort(nums1);
}

双指针

 public void merge(算法剖析的意图是int[] nums1, int m, int[] nums2, int n) {
int p1 =数组指针 0, p2 = 0;
int[] sorted = new int[m + n];
int cur;
while (p1 < m || p2 <数组词 n) {数组词
if (p1 == m) {//假定p1==m阐明左边插完了。接着插nums2
cur = nums2[p2];
p2++;
} else if (p2 == n) {假定p2==n阐明右边插完了。接着插nums1
cu算法是什么r = nums1[p1];
p1++;
} else if (nums1[p1] < nums2[p2]) {
//先从nums1[0]和nu数组的界说ms2[0]比较开始
//假定左边小于右边,则p1自增
cur = nums1[p1];//并把此时p1的值刺进到sorted数组里
p1++;
} else {//反之则把p2的值刺进到sorted数组里
cur = nums2[p2];
p2++;
}
sorted[p1 + p2 - 1] = cur;
}
for (int i = 0; i != m + n; ++i) {
nums1[i] = sorted[i];
}
}

反向双指针

 public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1, p2 = n - 1;//左指针在nums1毕竟一位,右指针在nums2毕竟一位
int tail = m + n - 1;//倒序开始下标为m+n-1
int cur;
wh数组公式ile (p1 >= 0 || p2 >算法的有穷性是指= 0) {//p1 p2小于0则现已遍历完了
if (p1 == -1) {
cur = nums2[p2];
p2--;
}算法规划与剖析 else数组c言语 if (数组指针p2 == -1) {
cur = nums1[p1];
p1--;
} el数组词se if (nums1[p1] > nums2[p2]) {//对比nums1数组和nums2最右边的数的大小
cur = nu数组和链表的差异ms1[p1];//nums1比nums2的最右边更大则把最大值存在cur里
p1--;//p1指针向左移算法的有穷性是指
} else {
cur = nums2[p2]算法的时刻复杂度是指什么;//反之p2向左移
p2--;
}
nums1[tail] = cur;//算法的时刻复杂度取决于赋值到nums1的右边value=0的方位
tail--;
}
}

##总结

简略算法,关于防止老年痴呆,十分好用