leetcode-88. 合并两个有序数组 · Aaray
2024-09-01 15:20:46
题面
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
样例
1. 输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6] 2. 输入:nums1 = [0], m = 0
nums2 = [6], n = 1 输出: [6]
算法
时间复杂度:O(n+m)
与合并有序链表类似。
1. 如果m为0,直接返回就可以了。如果n为0,则需要把nums2中前n个元素都搬到nums1中,返回。
2. 如果,m、n都不为0,计算合并后的元素数len = m+n, 我们从后往前为nums1[len--]赋max(nums1[m]nums2[n]), 之后较大的数组下标自减(已经比较后填入了nums1中),直到某个数组被遍历完。
3. 如果2之后,m == 0,那么代表nums1中的元素都已经填完了,就把nums2中剩下的元素按次序填入nums1中即可;如果 n == 0,即nums2填完了,那就结束,剩下的nums1本来就是有序的。
源码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
if(n == )
return ;
else if(m == )
{
for(int i=; i<n; i++)
nums1[i] = nums2[i];
} //从往前放置
int len = m+n-;
m--; n--;
while(m >= && n >= && len >= )
{
if(nums1[m] < nums2[n])
{
nums1[len] = nums2[n];
len--; n--;
}
else
{
nums1[len] = nums1[m];
len--; m--;
}
}
if(m < )
{
for(int i=; i<=n; i++)
nums1[i] = nums2[i];
}
}
};
最新文章
- SDOI 2016 数字配对
- gcc的-D和-U参数:宏的设置与取消 _CCFLAGS="; -w -enable-threads=posix -DLINUX -D_REENTRANT -DWORKONGN -Dlinux -D_GN_DETAIL_SDR_";
- IOS 的loadView 及使用loadView中初始化View注意的问题。(死循环并不可怕)
- Oracle EBS-SQL (SYS-10):锁定表查询.sql
- Linux 高性能server编程——高级I/O函数
- 1.1 什么是LinQ
- QzzmServer v2.0正式版发布
- BASH SHELL not a valid identifier
- 【Spring系列】自己手写一个 SpringMVC 框架
- qt 视频播放器错误解决方法
- 深入理解Spring IOC工作原理
- Docker最全教程——从理论到实战(七)
- NPM,bower的安装目录
- 出现 OSError: symbolic link privilege not held的解决方案
- 计划任务执行bat
- 从匿名函数(闭包特性)到 PHP 设计模式之容器模式
- unity pattern not found
- 练习vue(用户管理)1
- Linux下gcc编译生成动态链接库*.so文件并调用它(注:执行Test程序后无需用export 命令指定.so库文件路径:方法在文中下方;)
- fedora修改主目录文件名为英文