leetcode:88. 合并两个有序数组

题目来源

leetcode

题目描述

leetcode:88. 合并两个有序数组_第1张图片

题目解析

相等时先拷贝长数组的,让空间早释放

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

leetcode:88. 合并两个有序数组_第2张图片

类似题目

题目 核心思路
leetcode:21. 合并两个有序链表 Merge Two Sorted Lists 比较当前两个节点值大小,然后移动较小的那个
leetcode:23. 合并K个升序链表 Merge k Sorted Lists 逐一合并两条链表;分治合并;k指针;优先队列(将链表的值存入小根堆中,再逐次将堆顶取出连接成链表)
leetcode:148. 排序链表 Sort List 归并排序:将链表从中间断开【快慢指针取中】,分成连部分,左右两边在分别分开。。。一直到只剩下一个节点【这个时候就没有方法在拆分了】,然后就可以merge了
leetcode:88. 合并两个有序数组到较长数组中 Merge Sorted Array 从 nums1 和 nums2 数组的末尾开始一个一个比较,把较大的数,按顺序从后往前加入混合之后的数组末尾
leetcode:986. 区间列表的交集 Interval List Intersections 双指针:一个指针扫描A数组,一个指针扫描B数组,根据子区间的两端,求出一个交集区间。求完一个交集区间后,较早结束的子区间,不可能与别的子区间重叠,它的指针要移动
leetcode:2124. 检查是否所有 A 都在 B 之前 Squares of a Sorted Array s[i] - s[i - 1] < 0
leetcode:244. 给定单词列表和两个不同单词,求最短单词距离 ii(Shortest Word Distance II ) 用两个指针i和j来指向位置数组中的某个元素,开始时均初始化为0,然后比较位置数组中的数字,将较小的一个指针向后移动一位,直到其中一个数组遍历完成即可

你可能感兴趣的:(算法与数据结构,leetcode,算法,c++)