大年初二快乐,但是关于数组的小反思(写代码写乐了
1.故事的起因
这样一道关于合并数组的题:https://ac.nowcoder.com/acm/contest/93951/P
写它之前做了一道在数组中插入一个数的题,其中运用到了关于移位,寻找插入位置的各种东西,如下
#include <stdio.h> #define MAXN 51 // 考虑插入一个数后数组长度最大为 N + 1 int main() { int N; // 读取原序列的长度 scanf("%d", &N); int arr[MAXN]; // 读取升序排列的整数序列 for (int i = 0; i < N; i++) { scanf("%d", &arr[i]); } int numToInsert; // 读取要插入的整数 scanf("%d", &numToInsert); int i; // 找到插入位置 for (i = N - 1; i >= 0 && arr[i] > numToInsert; i--) { arr[i + 1] = arr[i]; // 将比插入数大的元素后移一位 } arr[i + 1] = numToInsert; // 插入新数 // 输出插入新数后的有序序列 for (i = 0; i < N; i++) { printf("%d ", arr[i]); } printf("%d\n", arr[N]); return 0; }然后呢,就导致我对这个合并数组产生了很大的恐惧:这得对两个数组同时遍历吧,这我得移多少次位置,反复比较多少次啊。。。
2.为什么会乐
于是上网学习怎么做这道题,其中一个解法就是像我一开始想的那样,同时遍历两个数组,同时进行比较,我感觉我是想不到的;然而之后我又看到了一个解法,这个解法很妙,很巧,而且很简单,直接乐出来了;
于是上网学习怎么做这道题,其中一个解法就是像我一开始想的那样,同时遍历两个数组,同时进行比较,我感觉我是想不到的;然而之后我又看到了一个解法,这个解法很妙,很巧,而且很简单,直接乐出来了;
题解要求的输入两行数,我不分别输入两个数组,然后分别遍历什么的,他就直接输入到一个数组里面,然后进行一次冒泡排序就完事了。
没了。