栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法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 等来代替数组的下标,进而来实现指针的效果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648347.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号