【发布时间】:2021-05-10 13:28:58
【问题描述】:
我正在解决 leetcode 问题合并排序数组,在 leetcode 上运行以下代码时出现运行时错误
给定两个排序整数数组 nums1 和 nums2,将 nums2 合并为 nums1 作为一个排序数组。 nums1 和 nums2 中初始化的元素个数分别为 m 和 n。您可以假设 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]
我的代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = 0, j = 0, k = m-1;
while(i<=k && j<m) {
if(nums1[i] < nums2[j]) {
i++;
}
else {
swap(nums2[j++], nums1[k--]);
}
}
sort(begin(nums1), begin(nums1) + m );
sort(begin(nums2), end(nums2));
k = m + 1;
for(int l = 0; l < n; l++) {
nums1[k] = nums2[l];
k++;
}
}
};
【问题讨论】:
-
想想
j < m,哪个向量j索引,哪个向量的大小是m。 -
对谁说只是使用调试器,附议。
-
@underscore_d 是我,但我删除了我的评论并将其变成了答案。我在此过程中丢失了调试器建议 :-) 我现在已将其添加到答案中。
-
@molbdnilo 谢谢!你说得对,应该是
j < n
标签: c++ array-merge