Skip to content

Latest commit

 

History

History
124 lines (96 loc) · 4.26 KB

README.md

File metadata and controls

124 lines (96 loc) · 4.26 KB

数组 & 指针

数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。

2020-Autumn纳新考核 task-02

任务目的

  • 了解指针的定义和使用,进一步熟悉数组的操作,学会分配内存创建动态数组
  • 了解时间复杂度空间复杂度的概念。

任务说明

本任务是面向零基础的同学,如果已经有一定的基础,可以尽快完成,并给予我们反馈,我们将会针对你们的反馈做进度和内容上的调整。

任务时间

预计2周时间 于11月22日之前完成

注: 起始时间为该md文档上传至仓库的时间

任务内容

  1. 了解时间复杂度空间复杂度分别是什么。
  2. 了解地址指针的概念,学习使用指针来访问数组。
  3. 学习动态数组的创建和使用。
  4. 把对任务的心得以及学习笔记均写在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 写笔记的网站(简书、博客园等),也可以自己搭建一个属于自己的博客。
  • 如果经济允许,你们也可以租一个服务器,自己折腾学习去部署一个属于自己的博客。

参考资料