数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。
- 了解
指针
的定义和使用,进一步熟悉数组
的操作,学会分配内存创建动态数组
。 - 了解
时间复杂度
和空间复杂度
的概念。
本任务是面向零基础的同学,如果已经有一定的基础,可以尽快完成,并给予我们反馈,我们将会针对你们的反馈做进度和内容上的调整。
预计2周时间 于11月22日之前完成
注: 起始时间为该md文档上传至仓库的时间
- 了解
时间复杂度
与空间复杂度
分别是什么。 - 了解
地址
、指针
的概念,学习使用指针来访问数组。 - 学习
动态数组
的创建和使用。 - 把对任务的心得以及学习笔记均写在README.md中并且完成下面任务作业中的题目,将源代码上传至仓库。
1.给定两个有序整数数组a和b,初始化数组a和b的元素数量分别为m,n。现在要求将b合并到a中,使得a成为一个有序数组并且将时间复杂度
和空间复杂度
尽可能的降低。
说明:
- a中有足够的空间(空间大小大于或等于 m + n)来保存b中的元素。
- 最好能够实现时间复杂度O(m+n),空间复杂度O(1)的算法
样例:
已有
a = [1,2,3,8,0,0,0], m = 4
b = [2,5,6], n = 3
输出:
[1,2,2,3,5,6,8]
参考提交函数格式
void merge(int* a, int m, int* b,int n){
//code
}
2.给定一个 n × n 的二维数组表示的一个矩阵,将其顺时针旋转 90 度。
说明:
- 请
原地
修改这个矩阵,即实现空间复杂度O(1)的算法。
给定二维数组
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转后变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
参考提交函数格式
void rotate(int** matrix, int n){
//code
}
3.给定已知长度的数组,使用指针遍历数组。
参考提交函数格式
void traversal1(int* a, int n){
//code
}
4.给定参数n,返回一个长度为n的动态数组,并为其赋值1,2,3,4...至n。
参考提交函数格式
int* createArray(int n){
//code
}
5.给定参数m,n,返回一个m行n列的动态数组,并为其赋值1,2,3,4...至m*n。
给定参数m,n为3,3
返回二维数组
[
[1,2,3],
[4,5,6],
[7,8,9]
],
参考提交函数格式
int** createArray(int n,int m){
//code
}
6.经典爬楼梯问题,假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。有n种不同的方法可以爬到楼顶,返回n。(可选)
本次任务要求将解决问题的函数打包于一个源文件中上传提交。
7.搭建个人博客。(可选)
说明:
- 身为一个合格的程序员,在进入学习时都要使用笔记加强自己的记忆,当然,建议这些笔记用
markdown
来写,这时你笔记的归属变成了问题。你可以在网上找找相关的可用markdown
写笔记的网站(简书、博客园等),也可以自己搭建一个属于自己的博客。 - 如果经济允许,你们也可以租一个服务器,自己折腾学习去部署一个属于自己的博客。