算法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月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
109 0
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
46 0
|
4月前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
2月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
48 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
27 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
4月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
4月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
4月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
4月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
4月前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积