摘要:
题目: 班上有N名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知A是B的朋友,B是C的朋友,那么我们可以认为A也是C的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个N * N的矩阵M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生 阅读全文
摘要:
题目: 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。 示例: 输入: 11110 11010 11000 00000 输出: 1 分析: 这 阅读全文
摘要:
题目: 给定一个包含了一些 0 和 1 的非空二维数组 grid 。 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则 阅读全文
摘要:
题目: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例2: 输入: n = 13 输出: 2 解释: 13 = 4 + 阅读全文
摘要:
题目: 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长 阅读全文
摘要:
题目: 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。 一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, ..., C_k 组成: 相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 阅读全文
摘要:
实现多线程编程主要有两种方式:一种是继承Thread类,一种是实现Runnable接口。这两种方式在运行结果上其实并没有多大的差别,但是应用场景和内部执行流程还是有区别的。 其实Thread类也是实现了Runnable接口的类,这点通过其源码就可以看出来: public class Thread i 阅读全文
摘要:
图的遍历是指访问图中的每一个顶点,且只访问一次。最经典的遍历图的方法就是深度优先遍历和广度优先遍历,这两种遍历方法都会产生一个生成树。我们用程序来实现这两种遍历算法的时候,一定要认真分析它们的算法思想以及具体细节,因为遍历图的顶点,每个顶点只能访问一次,所以需要专门设置一个访问标记数组用于标记顶点是 阅读全文
摘要:
为了方便的使用图这个数据结构,我们需要使用编程语言对其抽象的内容进行具体化,我们在设计一个复杂的数据结构的时候可以参考Java集合框架的特点,首先定义一个接口,包含的是图的所有的常用的公共的操作,然后定义一个抽象类来部分地实现这个接口,最后根据具体的使用情况定义具体的类实现抽象类。 图的常用操作: 阅读全文
摘要:
图是一种基本的非线性数据结构,其相关基本概念介绍太多了,这里就不再重复说了。为了让自己能够复习的印象深刻一些,今天专门总结一些图的基本知识。 一、基本的知识点 图包含两个核心要素:顶点和边,一个图可以没有边,但不能没有顶点。 图分可以分为无向图和有向图,有向图就是在这个图中每一条边都有一个方向,表示 阅读全文