背景

Datawhale 是国内很有名的一个开源学习组织。这个组织将渴望改变的学习者以及一群有能力有想法的青年人集结在一起,营造出一种互促高效的学习环境,一起为开源学习付出努力。

Datawhale 近期将推出三门课程的组队学习。我先将 数据结构与算法(上) 的任务发布出来。如果你愿意跟我们一起来学习这门课程,请留意我们近期公布的 “Datawhale第八期组队学习计划”。


学习任务

Task01:数组(1天)

理论部分

  • 理解数组的存储与分类。
  • 实现动态数组,该数组能够根据需要修改数组的长度。

练习部分

1. 利用动态数组解决数据存放问题

编写一段代码,要求输入一个整数N,用动态数组A来存放2~N之间所有5或7的倍数,输出该数组。

示例:

输入:
N = 100 输出:
5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100

2. 托普利茨矩阵问题

如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。

给定一个M x N的矩阵,当且仅当它是托普利茨矩阵时返回True

示例:

输入:
matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]
]输出: True

解释:

在上述矩阵中, 其对角线为:
"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"
各条对角线上的所有元素均相同, 因此答案是True

3. 三数之和

https://leetcode-cn.com/problems/3sum/

给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a + b + c = 0?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]
]

Task02:顺序表和链表(2天)

理论部分

  • 理解线性表的定义与操作。
  • 实现顺序表。
  • 实现单链表、循环链表、双向链表。

练习部分

1. 合并两个有序链表

https://leetcode-cn.com/problems/merge-two-sorted-lists/

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

2. 删除链表的倒数第N个节点

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

3. 旋转链表

https://leetcode-cn.com/problems/rotate-list/

给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。

示例 1:

输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL

示例 2:

输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL

Task03:栈与递归(2天)

理论部分

  • 用数组实现一个顺序栈。
  • 用链表实现一个链栈。
  • 理解递归的原理。

练习部分

根据要求完成车辆重排的程序代码。

假设一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1n,货运列车按照第n站至第1站的次序经过这些车站。车厢的编号与它们的目的地相同。为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使各车厢从前至后按编号1n的次序排列。当所有的车厢都按照这种次序排列时,在每个车站只需卸掉最后一节车厢即可。

我们在一个转轨站里完成车厢的重排工作,在转轨站中有一个入轨、一个出轨和k个缓冲铁轨(位于入轨和出轨之间)。图(a)给出一个转轨站,其中有k个(k=3)缓冲铁轨H1H2H3。开始时,n节车厢的货车从入轨处进入转轨站,转轨结束时各车厢从右到左按照编号1n的次序离开转轨站(通过出轨处)。在图(a)中,n=9,车厢从后至前的初始次序为5,8,1,7,4,2,9,6,3。图(b)给出了按所要求的次序重新排列后的结果。

编写算法实现火车车厢的重排,模拟具有n节车厢的火车“入轨”和“出轨”过程。


Task04:队列(2天)

理论部分

  • 用数组实现一个顺序队列。
  • 用数组实现一个循环队列。
  • 用链表实现一个链式队列。

练习部分

1. 模拟银行服务完成程序代码。

目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦。

排队叫号软件的具体操作流程为:

  • 顾客取服务序号

当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一张服务单。单上显示服务号及该服务号前面正在等待服务的人数。

  • 服务员工呼叫顾客
    服务员工只需按一下其柜台上呼叫器的相应按钮,则顾客的服务号就会按顺序的显示在显示屏上,并发出“叮咚”和相关语音信息,提示顾客前往该窗口办事。当一位顾客办事完毕后,柜台服务员工只需按呼叫器相应键,即可自动呼叫下一位顾客。

编写程序模拟上面的工作过程,主要要求如下:

  • 程序运行后,当看到“请点击触摸屏获取号码:”的提示时,只要按回车键,即可显示“您的号码是:XXX,您前面有YYY位”的提示,其中XXX是所获得的服务号码,YYY是在XXX之前来到的正在等待服务的人数。
  • 用多线程技术模拟服务窗口(可模拟多个),具有服务员呼叫顾客的行为,假设每个顾客服务的时间是10000ms,时间到后,显示“请XXX号到ZZZ号窗口!”的提示。其中ZZZ是即将为客户服务的窗口号。

Task05:字符串(2天)

理论部分

  • 用数组实现一个顺序的串结构。
  • 为该串结构提供丰富的操作,比如插入子串、在指定位置移除给定长度的子串、在指定位置取子串、连接串、串匹配等。

练习部分

1. 题目

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

输入: "abcabcbb"输出: 3

解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

2. 题目

给定一个字符串s和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

输入:s = "barfoothefoobarman",words = ["foo","bar"]
输出:[0,9]

解释:

从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重要, [9,0] 也是有效答案。

3. 替换子串得到平衡字符串

https://leetcode-cn.com/problems/replace-the-substring-for-balanced-string/

有一个只含有'Q', 'W', 'E','R'四种字符,且长度为 n的字符串。假如在该字符串中,这四个字符都恰好出现n/4次,那么它就是一个「平衡字符串」。

给你一个这样的字符串 s,请通过「替换一个子串」的方式,使原字符串s变成一个「平衡字符串」。你可以用和「待替换子串」长度相同的任何其他字符串来完成替换。

请返回待替换子串的最小可能长度。

如果原字符串自身就是一个平衡字符串,则返回 0。

示例1:

输入:s = "QWER"
输出:0
解释:s 已经是平衡的了。

示例2:

输入:s = "QQWE"
输出:1
解释:我们需要把一个 'Q' 替换成 'R',这样得到的 "RQWE" (或 "QRWE") 是平衡的。

示例3:

输入:s = "QQQW"
输出:2
解释:我们可以把前面的 "QQ" 替换成 "ER"。

示例4:

输入:s = "QQQQ"
输出:3
解释:我们可以替换后 3 个 'Q',使 s = "QWER"。

我是终身学习者“老马”,一个长期践行“结伴式学习”理念的中年大叔。

我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。

Datawhale组队学习:数据结构与算法课程任务相关推荐

  1. Datawhale组队学习:初级算法梳理课程任务

    背景 Datawhale 是国内很有名的一个开源学习组织.这个组织将渴望改变的学习者以及一群有能力有想法的青年人集结在一起,营造出一种互促高效的学习环境,一起为开源学习付出努力. Datawhale ...

  2. 五、在测试集上评估图像分类算法精度(Datawhale组队学习)

    文章目录 配置环境 准备图像分类数据集和模型文件 测试集图像分类预测结果 表格A-测试集图像路径及标注 表格B-测试集每张图像的图像分类预测结果,以及各类别置信度 可视化测试集中被误判的图像 测试集总 ...

  3. 数据结构与算法深入学习_我最喜欢的免费课程,用于深入学习数据结构和算法...

    数据结构与算法深入学习 by javinpaul 由javinpaul Data structures and algorithms are some of the most essential to ...

  4. 【新周报(050)】Datawhale组队学习

    记录: 按照Datawhale第33期组队学习的规划,六门课程 <吃瓜教程--西瓜书+南瓜书>.<动手学数据分析>.<李宏毅机器学习(含深度学习)>.<数据可 ...

  5. Datawhale组队学习周报(第047周)

    本周报总结了从 2021年01月03日至2022年01月09日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. ...

  6. Datawhale组队学习周报(第040周)

    本周报总结了从 11月15日至11月21日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. 第 31 期组队学习 ...

  7. Datawhale组队学习周报(第019周)

    本周(06月21日~06月27日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群,参与的学习者有 292 人,其中 web开发入门教程.数据挖掘实战(异常检测) 已经结营,另外一 ...

  8. Datawhale组队学习周报(第018周)

    文章目录 本周结营的开源内容 即将结营的开源内容 正在进行的开源内容 七月排期的开源内容 希望排期的开源内容 每周号外 Whalepaper 招新公告 本周(06月14日~06月20日),第 25 期 ...

  9. Datawhale组队学习周报(第017周)

    本周(05月31日~06月06日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群,参与的学习者有 292 人,其中 web开发入门教程 已经结营,另外两门课程也在结营筹划中. 第 ...

  10. Datawhale组队学习周报(第005周)

    本周(03月15日~03月21日),第 23 期组队学习正在如火如荼的进行中.本期组队学习,一共有 4 门开源课程,共组建了 5 个学习群,参与的学习者有 740 人.另外,第 24 期组队学习也蓄势 ...

最新文章

  1. 操作系统常用词典(三)
  2. Comet OJ - 模拟赛 #2 Day2
  3. python numpy.meshgrid() 函数的用法(快速生成坐标矩阵)
  4. Bootstrap的坑--千万别踩
  5. Bicolored RBS
  6. 设计模式在Netty中的应用-观察者模式源码举例
  7. 第三次学JAVA再学不好就吃翔(part113)--对象操作流
  8. 如何调整自定义标签样式
  9. java jdbc pr_Java JDBC学习笔记
  10. Python小应用1 - 抓取网页中的链接地址
  11. 《SQL注入攻击与防御》读书笔记
  12. windows录屏_工具推荐:这些录屏软件既免费又好用
  13. 组成原理---控制器
  14. python安装pygame教程_python-pygame安装教程
  15. PTCMS4.2.8小说网站源码模板
  16. 推荐几个短网址赚钱站
  17. Tutorial 05: Synching Video
  18. python协程池_python3下multiprocessing、threading和gevent性能对比—-暨进程池、线程池和协程池性能对比 | 学步园...
  19. 【Phase One SDK】飞思相机SDK的环境配置及调用
  20. 字符串按大小写排序,大写在前,小写在后,比如AaBCcD

热门文章

  1. spring cloud服务发现注解之@EnableDiscoveryClient与@EnableEurekaClient
  2. linxu 下安装mysql5.7.19
  3. [20160608]自治事务引起死锁.txt
  4. 将baidu地图中的baidu logo去掉
  5. MAC安装OpenXenManager管理Xenserver
  6. cookie的作用域
  7. 【物联网中间件平台-01】真正面向物联网的组态软件 YFIOs和YFHMI的前生今世
  8. IE下javascript的console方法
  9. 编程小问题系列(2)——为什么WPF里MediaElement等视频控件不起作用
  10. ForefrontTMG关于单一的网络适配器限制