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

算法001:合并两个有序的数组,第1张

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

写在开头:这是自己的第001道算法题,来源于牛客网(地址:题目地址),分享自己的解题思路。来借此鼓励自己学习算法并坚持下去!

首先来看一下题目描述:

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

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

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));
    }
}

输出结果:

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

爱在结尾:数组中的指针,可以利用变量 i 等来代替数组的下标,进而来实现指针的效果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存