03 2020 档案
摘要:Dijkstra 算法是处理单源最短路径的有效算法,但它对存在负权回路的图就会失效。这时候,就需要使用其他的算法来应对这个问题,Bellman Ford(中文名:贝尔曼 福特)算法就是其中一个。 Bellman Ford 算法不仅可以求出最短路径,也可以检测负权回路的问题。该算法由美国数学家理查德•
阅读全文
摘要:Dijkstra 算法(中文名:迪杰斯特拉算法)是由荷兰计算机科学家 Edsger Wybe Dijkstra 提出。该算法常用于路由算法或者作为其他图算法的一个子模块。举例来说,如果图中的顶点表示城市,而边上的权重表示城市间开车行经的距离,该算法可以用来找到两个城市之间的最短路径。 算法过程 我们
阅读全文
摘要:memset函数 按照字节填充某字符 在头文件里面 fill函数 按照单元赋值,将一个区间的元素都赋同一个值 在头文件里面 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和 1,其他的不能。因为只有000
阅读全文
摘要:请你实现一个类 UndergroundSystem ,它支持以下 3 种方法: 1. 编号为 id 的乘客在 t 时刻进入地铁站 stationName 。 一个乘客在同一时间只能在一个地铁站进入或者离开。 2. 编号为 id 的乘客在 t 时刻离开地铁站 stationName 。 3. 返回从地
阅读全文
摘要:“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。 图1 六度空间示意图 “六度空间”理论虽然得到广泛的认同,并且正
阅读全文
摘要:给定一个有 N 个顶点和 E 条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到 N −1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1行给出2个整数 N (0 using namespace std; define MAX
阅读全文
摘要:2020/3/19:目前正在已经大体通学了(超不牢固),所以现在想重新复习一遍各大结构,顺便做一份笔记总结一些 解题套路 1、链表 链表的定义(来自维基百科): 在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data
阅读全文
摘要:约数 1200000有多少个约数(只计算正约数)。 #include <stdio.h> int main() { int count = 0, n = 1200000; for (int i = 1; i * i <= n; ++i) { if (n % i == 0) count += 2; }
阅读全文
摘要:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 解法: 归并法 解法:递归法
阅读全文
摘要:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 解法: 老实用快慢指针,快指针先走n步,然后快慢一起走,直到快指针走到最后,要注意的是可能是要删除第一个节点,这个时候可以直接返回
阅读全文
摘要:编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表 : " " 在节点 c1 开始相交。 示例 1: " " 示例 2: " " 示例 3: " " 注意: 如果两个链表没有交点,返回 . 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。 程序尽量满足 O( n
阅读全文
摘要:特别感谢LeetCode大佬 "陈牧远" 的科普知识 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n ),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 示例 2: 说明: 1. 不能 更改原数组(假设数组是只读
阅读全文
摘要:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 。 为了表示给定链表中的环,我们使用整数 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 是 ,则在该链表中没有环。 说明: 不允许修改给定的链表。 示例 1: 示例 2: 示例 3: 进阶: 你是否可以不用额外空间解决
阅读全文
摘要:给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 是 ,则在该链表中没有环。 示例 1: 示例 2: 示例 3: 进阶: 你能用 O(1) (即,常量)内存解决此问题吗? 代码: 中规中矩的快慢指针,12ms 9MB
阅读全文
摘要:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 问题分析 对于链表的问题,根据以往的经验一般都是要建一个dummy node,连上原链表的头结点,这样的话就算头结点变动了,我们还可以通过dummy next来获得新链表的头结点。这道题的要
阅读全文
摘要:给定一个链表和一个特定值 x ,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: Code: 巧设双指针
阅读全文
摘要:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? Code: 递归法 Code: 双指针法
阅读全文
摘要:给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。 输入格式: 输入在一行中先给出 N(1 using namespace std
阅读全文
摘要:设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性: 和 。`val next prev 0 index `的。 在链表类中实现这些功能: :获取链表中第 index 个节点的值。如果索引无效,则返回 1。 :在链表的第一个元素之前添加一个值为 的节点。插入后,新节点将成为
阅读全文
摘要:给你一个 m n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元素中最大 示例 1: 示例 2: 示例 3: 提示: m == mat.length n == mat[i].len
阅读全文
摘要:今天是算法数据结构专题的第5篇文章,我们一起来学习一下「并查集」。 并查集被很多ACMer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。并支持两种操作: 合并(Union):把两个不相交的集合合并为一个集合。 查询(Find):查询两个元素是否在同一个集合中。 不多废话开始文章。
阅读全文
摘要:update:21/07/24 前言 绝对众数。在数列 中出现次数严格大于 的数叫做绝对众数。 快速排序 一般来说我们可以直接排序解决问题,如果存在绝对众数的话,最中间的数一定是绝对众数。 时间复杂度为 \(\mathcal{O}(
阅读全文
摘要:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 示例 2: Code:sort、hash、BM投票、随机数、位运算
阅读全文
摘要:本篇针对面试中常见的二叉树操作作个总结: 前序遍历,中序遍历,后序遍历; 1.1 前序遍历 **对于当前结点,先输出该结点,然后输出它的左孩子,最后输出它的右孩子。**以上图为例,递归的过程如下: 输出 1,接着左孩子; 输出 2,接着左孩子; 输出 4,左孩子为空,再接着右孩子; 输出 6,左孩子
阅读全文
摘要:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。 输入格式: 输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A Z(包括大、小写)、数字 0 9、
阅读全文
摘要:前言 在刷Leetcode的时候发现很多运算速度极快的代码都有这一段,所以研究一下. 第一次见这种代码懵了下,auto有接触过,其他就不太熟悉。 另一篇文章里也有详细解析 "[黑胡椒和盐" ](https://blog.csdn.net/qq_32320399/article/details/815
阅读全文
摘要:给定一个整数数组 ,只有我们可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果我们可以找出索引` i+1 & A) { int s= accumulate(A.begin(),A.end(),0); if(s % 3!=0) return false; int
阅读全文
摘要:月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。 注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为
阅读全文
摘要:给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 ,这个神奇的数字也叫 Kaprekar 常数。 例如,我们从 开始,将得到 现给定任意 4
阅读全文
摘要:正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。 现给定 A、DA、B、DB,请编写程序计算 PA+PB。 输入格式: 输入在一行中依次给出 A、D
阅读全文
摘要:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 1 示例 1: 输入: 输出: 示例 2: 输入: 输出: 限制:
阅读全文
摘要:今天是算法数据结构专题的第3篇文章,我们一起来学习一下「Boyer-Moore算法」。 BM算法介绍 各种文本编辑器的 "查找" 功能(Ctrl+F),大多采用 Boyer-Moore 算法。 Boyer-Moore 算法不仅效率高,而且构思巧妙,容易理解。1977 年,德克萨斯大学的 Robert
阅读全文
摘要:今天是算法数据结构专题的第2篇文章,我们一起来学习一下「滑动窗口算法」。 前言 最近刷到leetCode里面的一道算法题,里面有涉及到Sliding windowing算法,因此写一篇文章稍微总结一下 算法题介绍 没有重复字符的子字符的最大长度:给一个字符串,获得没有重复字符的最长子字符的长度 例子
阅读全文
摘要:题目描述 面试题57 II. 和为s的连续正数序列 难度简单37收藏分享切换为英文关注反馈 输入一个正整数 ,输出所有和为 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 示例 2: 限制: `1 findContinuousSeque
阅读全文
摘要:大侦探福尔摩斯接到一张奇怪的字条: 。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间 ,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 ,代表星期四;第 2 对相同的字符是 ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23
阅读全文
摘要:给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和; A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯; A3 = 被 5 除后余 2 的数字的个数; A4 = 被 5 除后余 3 的数字的平
阅读全文
摘要:设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n xn 1。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零
阅读全文
摘要:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。 输出格式: 每个测试用
阅读全文
摘要:一个数组A中存有N(N 0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M =0)个位置,即将A中的数据由(A0 A1……AN 1)变换为(AN M …… AN 1 A0 A1……AN M 1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计
阅读全文
摘要:卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接
阅读全文
摘要:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。 示例 1: 示例 2: Code
阅读全文
摘要:给定两个字符串 和 ,编写一个函数来判断 是否是 的字母异位词。 示例 1: 示例 2: 说明: 你可以假设字符串只包含小写字母。 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况? 方法一:直接sort函数 方法二: map计数 方法三: 数组法(hash)
阅读全文
摘要:给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入: A = [1,2,3,0,0,0], m = 3 B = [2,5,6], n = 3 输出: [1,2,2,
阅读全文
摘要:Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each input file contains one t
阅读全文
摘要:题目描述 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二
阅读全文
摘要:滚动数组是DP中的一种编程思想。简单的理解就是让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用。起到优化空间,主要应用在递推或动态规划中(如01背包问题)。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效
阅读全文
摘要:题目描述: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 head = [4,5,1,9],它可以表示为: 示例 1: 示例 2: 说明: 链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个
阅读全文
摘要:题目描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0
阅读全文
摘要:查找表介绍 在日常生活中,几乎每天都要进行一些查找的工作,在电话簿中查阅某个人的电话号码;在电脑的文件夹中查找某个具体的文件等等。本节主要介绍用于查找操作的数据结构——查找表。 查找表是由 的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。 一般对于查找表有以下几种操作: 在查找表中
阅读全文