洗个澡把offer洗没了。。
不得不说,现在找工作不仅看实力,还得看运气,甚至看你几点洗澡。😵
一位网友分享:“上午十点多去洗了个澡,洗完出来手机一看——天塌了!offer飞了!HR发了几句话后直接把我删了,我连解释的机会都没有!”兄弟,你这是洗了个“告别社会澡”啊……
我一边笑一边心疼,这要是搁我身上,我洗澡的水都得咽回去,怕是洗出个失业警告。
但我也有点共情,毕竟HR信息要么来得像闪电,要么就像失踪人口,从不回头。你只要不在,就可能错过人生的转折点。
所以我现在是:洗澡?带手机。地铁?带流量。睡觉?静音都不敢开,怕一觉醒来offer没了,只剩一身迷茫和满浴室的泡沫
求职人太难了,洗澡都得排进时间管理四象限……你说离谱不离谱?
【备注:文末可领最新资料】。
算法题:有效的数独
今天我们要聊的正是如何通过编程来解决数独问题。
给大家介绍的是一道经典的算法题——有效的数独。
咱们得搞清楚题目要求。
有效的数独是这样的:给你一个 9x9 的二维数组,这个数组表示一个数独棋盘,其中空格用 '.' 表示,已填充的数字是 1 到 9。
我们要做的,就是判断这个数独是否有效。有效的数独,意味着以下几点:
每一行的数字 1-9 不能重复。 每一列的数字 1-9 不能重复。 每一个 3x3 的子网格内,数字 1-9 不能重复。
好,既然了解了问题的本质,咱们可以来写代码了。
考虑到题目并没有要求我们填充数独,而只是检查有效性,所以我们可以通过对每一行、每一列和每个子网格进行遍历来检查是否满足有效性条件。
我们可以通过三个 set 来分别检查行、列、3x3 子网格中的数字是否重复。
具体的思路是:对于数独中的每个非空格数字,我们分别检查这个数字是否已经出现在对应的行、列和子网格里。
如果有重复的数字,说明数独无效,直接返回 False。如果全部检查完后没有重复,说明数独是有效的。
下面是 Python 的实现:
defisValidSudoku(board):
# 创建三个列表,用来保存行、列、子网格的数字是否重复
rows = [set() for _ in range(9)]
cols = [set() for _ in range(9)]
boxes = [set() for _ in range(9)]
for i in range(9):
for j in range(9):
num = board[i][j]
if num == '.':
continue# 如果是空格,跳过
# 判断当前数字是否在对应的行、列、子网格里已经存在
box_index = (i // 3) * 3 + (j // 3) # 计算当前数字所在的3x3子网格索引
if num in rows[i] or num in cols[j] or num in boxes[box_index]:
returnFalse# 如果重复,直接返回 False
# 将当前数字添加到对应的行、列、子网格中
rows[i].add(num)
cols[j].add(num)
boxes[box_index].add(num)
returnTrue# 如果所有检查通过,返回 True
这段代码的工作原理其实很简单。我们使用了三个列表,rows、cols 和 boxes,它们分别用于存储每一行、每一列、每个 3x3 子网格中已经出现过的数字。
我们遍历整个数独棋盘,每遇到一个非空格的数字,就检查它是否已经出现在当前的行、列或子网格中。
如果出现重复,直接返回 False,否则把这个数字加入对应的集合里。
每次检查的时间复杂度是 O(1),而我们要遍历整个棋盘,因此总的时间复杂度是 O(81),也就是 O(1),这对于数独棋盘来说是非常高效的。
空间复杂度方面,我们需要额外的空间来存储行、列和子网格中的数字,所以空间复杂度是 O(1),也是常数级别的。
当然了,这道题目给出的“有效性”检查本质上是一个集合问题,我们通过利用集合的去重性质,能够非常高效地解决这个问题。
有时候大家可能会好奇,为什么要用 set 这种数据结构呢?为什么不用 list 或者其他类型的容器呢?
其实,set 之所以适合,是因为它提供了平均 O(1) 的查找和插入效率,而 list 则需要 O(n) 的查找时间,效率较低。所以在这种需要频繁检查重复的场景下,set 是最佳选择。
数独作为一种经典的逻辑推理游戏,程序员们通过算法实现它的有效性验证,既能提升编程技巧,也能享受解题的乐趣。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。