leetcode笔记:Merge Sorted Array
2024-08-27 14:09:13
一.题目描写叙述
二.解题技巧
这道题不存在复杂的分析过程和边界条件。假设单纯得考虑从小到大地将两个数组进行合并的话。每次在num1中插入一个数的话,须要将后面的元素都向后移动一位。这样。整个处理过程的时间复杂度为O(m*n)。
因为两个数组的元素的个数是知道的。同一时候,合并后的数组也是递增排序的,也就是说,排序之后的数组的最大值是放在最后面的。因此,我们能够从后往前遍历,也就是将最大值放在第一个数组的m+n-1位置。然后将次最大值放在m+n-2位置,依次类推。这样在将元素放置到合适位置的时候,就不须要移动元素,这种方法的时间复杂度为O(m+n)。
三.演示样例代码
// 时间复杂度O(m+n),空间复杂度O(1)
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int ia = m - 1, ib = n - 1, icur = m + n - 1;
while (ia >= 0 && ib >= 0) {
A[icur--] = A[ia] >= B[ib] ?
A[ia--] : B[ib--];
}
while (ib >= 0) {
A[icur--] = B[ib--];
}
}
};
// 使用STL
#include <iostream>
#include <vector>
using std::vector;
class Solution
{
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int ResultIndex = m + n - 1;
m--;
n--;
while (m >= 0 || n >= 0)
{
if (m < 0)
{
nums1[ResultIndex--] = nums2[n--];
continue;
}
if (n < 0)
{
nums1[ResultIndex--] = nums1[m--];
continue;
}
if (m >= 0 && n >= 0)
{
if (nums1[m] > nums2[n])
{
nums1[ResultIndex--] = nums1[m--];
continue;
}
else
{
nums1[ResultIndex--] = nums2[n--];
continue;
}
}
}
}
};
最新文章
- 关于URI URL URN
- jdbc/ojdbc连oracle的三种方式(转)
- json_encode
- 移动端HTML5资源整理
- 【系统移植】JNI
- mysql西文字符大小写重复键问题的解决方法
- Vue.js学习 Item7 -- 条件渲染与列表渲染
- 济南学习 Day 4 T1 pm
- Wix: Using Patch Creation Properties - Small Update
- 随手写了一个linux服务端与window客户端的epoll程序,当做练习把。
- mybatis通用DAO
- join多表连接和group by分组
- 2018年最新JAVA面试题总结之框架(4)
- 通过Docker发布RestAPI遇到的种种问题
- [wordpress]WordPress地址(URL)错误,修改解决方案
- C#核心基础--类的继承
- HTML 基础知识汇总(一)
- 【Java基础】11、java方法中只有值传递,没有引用传递
- 给iOS开发者的Android开发建议
- 使用axios请求数据,post请求出错。因为axios传递的请求参数是json格式,而后端接口要求是formData