步骤1:思考、在草稿纸上写流程图

原始讲义 · 非增强校订版 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 步骤1:思考、在草稿纸上写流程图

想好思路之后在草稿纸上写简易流程图,把一道题分为不同的步骤,估算复杂度并确保方法和复杂度都正确。

分析:题目中要我们求出所有元素的中位数,那如果所有元素已经排好序,中间的元素就是中位数。因此归并两个有序数组得到合并数组,然后输出中位数。

【解法2】优化解:多指针法,归并两个数组

流程:

1. 合并两个数组。

2. 输出中位数。

详细流程:

1. 合并两个数组。

a. 设置i、j、k分别指向各数组最小元素。

b. 循环将最小值存入新数组。

c. 将剩余元素依次存入数组C 中。

2. 输出中位数。

时间复杂度为 O(n),空间复杂度为 O(n)。

## 步骤2:在答题卡上写第1小问

根据草稿纸的简易流程图扩写变成第1小问,在写的时候需要慢慢考虑实现问题。

1. 合并两个数组,得到新的升序数组C。

a. 设置i、j、k分别指向 A、B、C 最小元素。

b. 只要A、B都存在元素就循环比较其最小值,将更小者存入数组C。

c. 将A、B数组中剩余元素依次存入数组C中。

2. 输出 C[n-1]。

<!-- page 190 -->

## 步骤3:在答题卡上写第2小问

根据简易流程图和第1小问,一个模块一个模块将过程变为代码。

原资料配图
原资料配图 · 转写内容请回源核验

## 步骤4:在答题卡上写第3小问

书写时间和空间复杂度(3) 时间复杂度:O(n) 空间复杂度:O(n)

## \*步骤5:复习时复盘

基础不太扎实的同学,如果做不出来算法题,可以分析到底是哪里出了问题:

• 不能很好的理清楚步骤、流程:

这一类同学思路有问题,需要优先练习思路,可以先尽可能多做题(真题+习题),只写步骤,不写代码,当你大部分题目都可以写出流程时再做下一步。 W

• 能写出详细的流程,但无法将对应流程转化为代码:

这一类同学思路没问题但代码写太少了,需要把所有真题练习完,如果某一道题过程没问题而只是具体模块不会写代码,则可以针对性的练习这一块代码,如:快速排序、折半查找,只要所有的模块都能写出代码,完整的代码肯定也没问题。

大部分畏惧代码题的同学都是因为自身在很多地方都有问题,自己只知道写不出来,但是哪里有问题不知道,这样的话也不能够有的放矢的分析,而总是想着我重新学一遍数据结构说不定就会了,但其实我们更需要的是针对性练习,首先知道自己的问题在哪:是过程不会写还是具体某个模块有问题。在此基础上再针对性复习就能事半功倍。

<!-- page 191 -->

6.4 复习思维导图

<!-- page 192 -->

原资料配图
原资料配图 · 转写内容请回源核验

<!-- page 193 -->

原资料配图
原资料配图 · 转写内容请回源核验