写在开头:这是自己的第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 等来代替数组的下标,进而来实现指针的效果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)