南宁百度seo网站优化,机票便宜 网站建设,北滘企业网站开发,怎样做微课网站目录
题目要求
代码实现 题目要求
nums1 和 nums2 是两个升序的整型数组#xff0c;另外有两个整数 m 和 n 分别代表 nums1 和 nums2 中的元素个数
要求合并 nusm2 到nums1 中#xff0c;使合并后的 nums1 同样按升序顺序排列
最终#xff0c;合并后的数组不应由函数返…目录
题目要求
代码实现 题目要求
nums1 和 nums2 是两个升序的整型数组另外有两个整数 m 和 n 分别代表 nums1 和 nums2 中的元素个数
要求合并 nusm2 到nums1 中使合并后的 nums1 同样按升序顺序排列
最终合并后的数组不应由函数返回而是存储在数组 nums1 中为了应对这种情况nums1 的初始长度为 mn 代码实现
代码演示
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{int end1 m - 1;int end2 n - 1;int i m n - 1;while (end1 0 end2 0){if (nums1[end1] nums2[end2]){nums1[i--] nums1[end1--];}else{nums1[i--] nums2[end2--];}}while (end2 0){nums1[i--] nums2[end2--];}
}
代码解析
end1 是 nums1 数组的最后一个有效元素的下标
end2 是 nums2 数组的最后一个有效元素的下标
i 是 nums1 数组的最后一个元素的下标
因为 nums1 和 nums2 数组都是升序的所以利用 end1 和 end2 依次找出各自数组的最大值然后利用 i 插入到 nums1 的最后一个元素这样就能避免 nums1 数组中的有效元素被覆盖
end1 和 end2 找到各自数组中的最大值后再往前找次大的值直到 end1 或者 end2 小于 0 了就停止
当 end2 小于 0 时说明 nums2 数组中的有效元素都有序的插入到了 nums1 数组中 否则就说明 nums2 数组中还有有效元素需要插入到 nums1 数组中且插入位置就是 i直接插入即可
代码演示
算法的时间复杂度
假设第一个 while 循环执行了 X 次那么第二个 while 循环就执行了 N-X 次
两个循环加在一起得X N-X N 由此得出算法的时间复杂度
算法的时间复杂度大O渐进表示法O(N)
算法的空间复杂度
没有开辟或消耗额外的空间所以得出算法的空间复杂度
算法的空间复杂度大O渐进表示法O(1)