算法001:合并两个有序的数组

简介: 算法001:合并两个有序的数组

image.png需要用到的知识点: 数组 + 双指针


下列代码已经在网上提交成功,所以举的例子比较简单


public class Main {//主函数
    public static void main(String[] args) {
        int[] A = new int[]{4,5,6};
        int[] B = new int[]{1,2,3};
        Solution.merge(A,3,B,3);
    }
}
class Solution {
    public  static void merge(int A[], int m, int B[], int n) {
        int[] C = new int[m + n];//定义一个辅助数组
        int i = 0;//这是指向数组A的指针
        int j = 0;//这是指向数组B的指针
        int p = 0;
        //这里的判断条件表示为:只要有一个数组(A or B)遍历完,就结束
        while (i < m && j < n) C[p++] = A[i] < B[j] ? A[i++] : B[j++];//这一步就开始了双链表
  //当A数组还有剩余元素的时候
        while (i < m) C[p++] = A[i++];
  //当B数组还有剩余元素的时候
        while (j < n) C[p++] = B[j++];
        A = C;//让A的引用指向C,这样就可以让数组A的值就是C的所有值了
        System.out.println(Arrays.toString(A));
    }
}


image.png

输出结果:

image.png

自己的思路: 这里的i、j 就是各自数组的指针,也就对应了上面的知识考察点:双指针。这里的i++、j++表示着指针的移动,拿第一次比较为例,当发现B数组的指针所指向的值(“1”)比A数组的指针所指向的值(“4”)小,B数组的指针就会因为j++来实现指针的下移,这是关键,自己第一次独立尝试做的时候,就想不到如何实现指针的下移。剩下的步骤跟第一步一样,慢慢分析就出来结果了。

image.png

相关文章
|
2月前
|
人工智能 移动开发 算法
【动态规划】【C++算法】LeetCoce996正方形数组的数目
【动态规划】【C++算法】LeetCoce996正方形数组的数目
|
1月前
|
算法 索引 Python
Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法
21 0
|
16天前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
19 0
|
16天前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
17 0
|
16天前
|
算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(上)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
22 0
|
16天前
|
算法 计算机视觉
算法系列--两个数组的dp问题(1)(下)
算法系列--两个数组的dp问题(1)
18 0
|
16天前
|
算法
算法系列--两个数组的dp问题(1)(上)
算法系列--两个数组的dp问题(1)
14 0
|
1月前
|
存储 算法 搜索推荐
在C++语言中数组算法
在C++语言中数组算法
14 0
|
1月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
1月前
|
存储 算法
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
23 0