解题思路
这是数据结构中比较经典的算法
法一以空间换时间
c++
建立一个临时数组temp存放排好序的元素
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int temp[m+n];//创建一个临时数组
int i=0,j=0;
int p=0;
while(i<m && j<n){
if (nums1[i]<nums2[j]){
temp[p++]=nums1[i++];
}
else
temp[p++]=nums2[j++];
}
//确保多余出来的数组也存放到临时数组中
//nums1比较长
while (i<m)
{
temp[p++] = nums1[i++];
}
//nums2比较长
while (j<n)
{
temp[p++] = nums2[j++];
}
//临时数组复制给nums1
for (int z=0;z<n+m;z++){
nums1[z]=temp[z];
}
}
};
法二
不设置临时数组将排好序的元素直接放入nums1中
有多种情况:
1.比较nums1和nums2中元素的的大小,倒着放入nums1中
2.nums1先遍历完,那么只需要将nums2中的元素放到nums1中即可
3.nums2先遍历完,那么遍历就结束了.
超出时间限制了,很奇怪一定是哪里出问题了
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
}
};
python
第一步先将nums1和nums2合并
第二部排序(sort函数是在原数组上操作)输出
class Solution(object):
def merge(self, nums1, m, nums2, n):
"""
:type nums1: List[int]
:type m: int
:type nums2: List[int]
:type n: int
:rtype: None Do not return anything, modify nums1 in-place instead.
"""
#合并数组
for i in range(m,m+n):
nums1[i]=nums2[i-m]
#排序,sort是python的内置库函数
nums3=nums1.sort()
return nums3