我是靠谱客的博主 辛勤白羊,这篇文章主要介绍合并两个有序数组(双指针法+空间优化),现在分享给大家,希望可以做个参考。

题目:

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

题解:

双指针法:O(m+n)时间复杂度,O(m+n)空间复杂度
如果两个指针从后往前,另外有一个p指针指向m+n的位置,则空间复杂度优化到O(1)

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p=m+n-1;
while(n){
if(m==0) nums1[p--]=nums2[--n];
else if(nums2[n-1] > nums1[m-1])
{
nums1[p--]=nums2[--n];
}
else
{
nums1[p--] = nums1[--m];
}
}
}
};

最后

以上就是辛勤白羊最近收集整理的关于合并两个有序数组(双指针法+空间优化)的全部内容,更多相关合并两个有序数组(双指针法+空间优化)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(147)

评论列表共有 0 条评论

立即
投稿
返回
顶部