随笔分类 - C++
摘要:804. 唯一摩尔斯密码词 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: 'a' 对应 ".-" , 'b' 对应 "-..." , 'c' 对应 "-.-." ,以此类推。 为了方便,所有 26 个英文字母的摩尔斯密码表如下: [".-","-..
阅读全文
摘要:Dijkstra算法 之前写了一篇例题的思考,半夜总觉得写的是个P,我自己都看不懂,所以大早上起来优化一下:-); 先给出一个我觉得好理解的模板:尽我所能的给出了注释来帮助理解(初始化一个啥样的邻接矩阵让人痛苦:( #include<iostream> #include<algorithm> usi
阅读全文
摘要:Dijkstra算法例题 最短路径算法 Dijkstra 算法(一般音译成迪杰斯特拉算法)无非就是一个 BFS 算法的加强版,它们都是从二叉树的层序遍历衍生出来的。 缺点: 迪杰斯特拉算法无法处理负权重边 例题: #include<iostream> #include<algorithm> #inc
阅读全文
摘要:双指针技巧秒杀七道数组题目 在处理数组和链表相关问题时,双指针技巧是经常用到的,双指针技巧主要分为两类:左右指针和快慢指针。 所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。 一、快慢指针技巧 数组问题中比较常见且难度不高的的快慢指针技巧,是让你原地修
阅读全文
摘要:217. 存在重复元素 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例
阅读全文
摘要:205. 同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本
阅读全文
摘要:203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:he
阅读全文
摘要:双指针技巧秒杀七道链表题目(2) 单链表的倒数第 k 个节点 从前往后寻找单链表的第 k 个节点很简单,一个 for 循环遍历过去就找到了,但是如何寻找从后往前数的第 k 个节点呢? 这个解法就比较巧妙了,假设 k = 2,思路如下: 首先,我们先让一个指针 p1 指向链表的头节点 head,然后走
阅读全文
摘要:202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就
阅读全文
摘要:191. 位1的个数 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数
阅读全文
摘要:双指针技巧秒杀七道链表题目 对于单链表相关的题目,双指针的运用是非常广泛的 例如: 1、合并两个有序链表 2、合并 k 个有序链表 3、寻找单链表的倒数第 k 个节点 4、寻找单链表的中点 5、判断单链表是否包含环并找出环起点 6、判断两个单链表是否相交并找出交点 合并两个有序链表 最基本的链表技巧
阅读全文
摘要:二叉树(纲领篇) 二叉树解题的思维模式分两类: 1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。 2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数
阅读全文
摘要:171. Excel 表列序号 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: columnTitle
阅读全文
摘要:190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编
阅读全文
摘要:条款1 视C++为一个语言联邦 如今的C++已经是个多重泛型编程语言。是一个同时支持过程形式,面向对象形式,函数形式,泛型形式,元编程形式的语言 C++可以看做一个由相关语言组成的联邦。 C++主要的次语言: C:说到底C++仍然以C为基础 Object-Oriented C++ Template
阅读全文
摘要:BFS 算法解题套路框架 BFS 的核心思想应该不难理解的,就是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,我们写 BFS 算法都是用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。 特点:BFS 找到的路径一定是最短的,但代价就是空间复杂度可能比 DFS 大很多 一、算
阅读全文
摘要:explicit 的作用(如何避免编译器进行隐式类型转换) 作用:用来声明类构造函数是显示调用的,而非隐式调用,可以阻止调用构造函数时进行隐式转换。只可用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显示调用的,再加上 explicit 关键字也没有什么意义。 注意:从 C++11 开始
阅读全文
摘要:lambda 表达式(匿名函数)的具体应用和使用场景 lambda 表达式的定义形式如下: [capture list] (parameter list) -> reurn type { function body } 其中: capture list:捕获列表,指 lambda 表达式所在函数中定
阅读全文
摘要:sizeof 和 strlen 的区别 strlen 是头文件 中的函数,sizeof 是 C++ 中的运算符。 strlen 测量的是字符串的实际长度(其源代码如下),以 \0 结束。而 sizeof 测量的是字符数组的分配大小。 strlen 源代码: size_t strlen(const c
阅读全文