写在开头:这是自己的第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 等来代替数组的下标,进而来实现指针的效果。