88. Merge Sorted Array
我的思路:
这道题感觉和以前的用链表差不多,但是其实是有区别的。链表当时是应该要求返回一个新的链表,这里是要求直接在第一个数组上面操作。
所以导致了这里写的时候有一些骚操作。第一个数组前面的部分可以不需要移动。并且为了减少第一个数组的后面部分频繁右移,直接从两个数组的后面开始考虑。
需要吐槽的是,自己构造测试用例的时候,LeetCode总是给出奇怪的答案,有次甚至都崩了,报了一个指针错误。。。
我的代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int target = m + n - 1;
while(n) {
if(m && nums1[m-1] > nums2[n-1]) {
nums1[target--] = nums1[m-1];
m--;
} else {
nums1[target--] = nums2[n-1];
n--;
}
}
}
};
这次速度是最快的。应该说和其他最快速度的解法,整个的算法思路是一样的。