
《算法》
文章平均质量分 68
《算法》学习笔记
拉车看路
低头拉车,抬头看路。
展开
-
【题解】预测赢家
leetcode 486:预测赢家原创 2020-09-01 09:55:01 · 1834 阅读 · 0 评论 -
【数据结构和算法】前缀树
文章目录概念保存字符串查找字符串概念前缀树,又称单词查找树、Trie树、字典树,该树能最大程度地复用各个单词(字符串)的公共前缀,高效地实现保存和查找单词(字符串)。保存字符串假设字符串只包含小写字母,树中的每个节点有26个孩子和一个标识位,节点的定义如下:class Trie {public: vector<Trie*> vt; bool isEnd; Trie() : vt(26, nullptr), isEnd(false) {} };vt中的元素指向26个孩子节原创 2020-07-26 20:54:32 · 247 阅读 · 1 评论 -
【题解】消失的两个数字
缺少的正数系列原创 2020-07-25 12:50:24 · 551 阅读 · 0 评论 -
【数据结构和算法】高级数据结构
抽签问题、熄灯问题、单调队列、字典树、数组实现哈希、并查集、线段树、树状数组原创 2020-10-27 15:46:07 · 607 阅读 · 0 评论 -
【题解】打家劫舍I II III
leetcode 打家劫舍I II III原创 2020-08-05 14:10:18 · 270 阅读 · 0 评论 -
【题解】接雨水
目录题目解题思路代码实现(C++)扩展题目题目来源:leetcode 42:接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路第一个和最后一个柱子上放不了雨水,其他每个柱子上能放的雨水量为max(min(leftMax, rightMax) - height[i], 0),height[i]是第i+1个柱子的高度,leftMax是该柱子左边最高柱子的高度原创 2020-07-26 18:10:38 · 224 阅读 · 0 评论 -
【题解】回文子串
leetcode 647:回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。原创 2020-08-19 09:53:24 · 274 阅读 · 0 评论 -
【题解】二叉树展开为单链表
给定一个二叉树,原地将它展开为一个单链表。原创 2020-08-03 14:33:16 · 654 阅读 · 0 评论 -
【题解】Pow(x, n)
实现 pow(x, n),即计算x 的n 次幂函数。原创 2020-08-14 12:18:01 · 303 阅读 · 0 评论 -
【数据结构和算法】并查集
并查集朋友圈问题原创 2020-08-18 17:12:14 · 156 阅读 · 0 评论 -
【题解】恢复二叉搜索树
leetcode 99:恢复二叉搜索树二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。树的中序遍历Morris算法原创 2020-08-09 12:19:45 · 460 阅读 · 0 评论 -
【题解】克隆图
leetcode 133:克隆图给你无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)。原创 2020-08-12 12:13:11 · 274 阅读 · 0 评论 -
【题解】表示数值的字符串
leetcode 剑指Offer 20:表示数值的字符串原创 2020-09-02 14:00:26 · 144 阅读 · 0 评论 -
【题解】LRU缓存
leetcode LRU缓存原创 2020-08-14 15:11:15 · 155 阅读 · 0 评论 -
【题解】旋转数组的最小数字
文章目录题目分析代码实现(C++)题目题目来源:leetcode 剑指Offer 11把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。示例1:输入: [3,4,5,1,2]输出: 1示例2:输入: [2,2,2,0,1]输出: 0示例3:输入: [2,3,5]输出: 2分析题目中没有说明输入数组为空时返回多少,因此姑且认为输入数组不可能为空。旋转前的数组是单调不减的,旋转后的数组会出现0个(原创 2020-07-25 13:56:10 · 258 阅读 · 0 评论 -
leetcode75_颜色分类_三分数组
三分数组定义循环不变量p0、p2、i,即在循环遍历数组的过程中,这些变量的含义是不变的。原创 2023-03-27 23:40:03 · 168 阅读 · 0 评论 -
leetcode148_排序链表的3种解法
leetcode148_排序链表的3种解法原创 2023-03-26 16:53:55 · 229 阅读 · 0 评论 -
【排序】选择排序和插入排序
文章目录排序算法相关接口选择排序插入排序排序算法相关接口排序关注的对象是数组元素(支持随机访问),每个元素都有一个key值,key值是能够按照某种方式排列(即可排序)的。一个排序算法大概需要实现如下接口:class SortFunc {public: void sort(Comparables a);private: bool less(const Comparable &a, const Comparable &b); void exch(Compar原创 2022-02-25 00:36:19 · 1058 阅读 · 0 评论 -
【并查集】union和find的几种实现
文章目录quick-find实现分析quick-union实现分析加权quick-union实现路径压缩的加权quick-union实现书接上回union-find算法(并查集),使用数组存储每个触点的分量标识,union和find有以下几种实现方式:(1) quick-find:find()的时间复杂度是O(1),union()的是O(n);(2) quick-union:find()的时间复杂度是O(n),union()的是O(1);(3) 加权quick-union:优化quick-union原创 2022-02-17 23:17:35 · 895 阅读 · 0 评论 -
union-find算法(并查集)
任何一种算法都是为解决某个问题而生的,union-find是用于解决动态连通性问题的一种算法。原创 2022-02-14 22:20:44 · 954 阅读 · 0 评论 -
使用单链表实现栈、队列和背包
文章目录单链表类节点类的声明类的实现基于单链表的栈实现测试运行单链表类链表和数组都属于线性(一对一)数据结构,即每个元素都有自己的前驱或者后继,或者两者都有。不同的是,在数组中,逻辑上相邻的两个元素地址也相邻;而在链表中,逻辑上相邻的两个元素地址未必相邻。节点一个单链表由数个节点链接起来,每个节点的定义如下:class Node {public: Node() : next_(nullptr) {} Node(const Item &item) : item_(item)原创 2022-02-12 23:22:10 · 448 阅读 · 1 评论 -
实现一个可迭代的栈
文章目录范围for循环Iterable可迭代栈实现测试运行范围for循环集合类数据类型的基本操作之一就是迭代遍历并处理集合中的每个元素。C++提供了范围for循环语句实现这个操作(从头到尾依次遍历元素)。一个可用于范围for循环(可迭代)语句的类必须满足以下条件:(1)实现begin()方法。获取指向第一个元素的迭代器或指针。(2)实现end()方法。获取指向最后一个元素的下一个元素的迭代器或指针。(3) begin()和end()的返回值支持++操作。std::vector<int&原创 2022-02-12 01:13:56 · 574 阅读 · 0 评论 -
实现一个固定容量的栈
文章目录定容字符串栈实现功能写测试运行定容栈实现测试运行定容字符串栈考虑实现一个固定容量的栈,该栈只能存储字符串。实现功能fix_string_stack.h#ifndef FIX_STRING_STACK#define FIX_STRING_STACK#include <vector>#include <string>using std::vector;using std::string;class FixStringStack {public:原创 2022-02-12 00:01:59 · 618 阅读 · 0 评论 -
背包、队列和栈的典型用例
文章目录背包队列栈算术表达式求值背包下面一个例子是计算标准输入中的所有double值的平均数和样本标准差。#include <iostream>#include <cmath>#include "bag.h"int main(){ Bag<double> bag; double d; while (std::cin >> d) { bag.Add(d); } double sum =原创 2022-02-11 01:41:47 · 398 阅读 · 0 评论 -
使用deque简单实现背包、队列和栈
文章目录算法自然语言描述C++实现数据结构背包队列栈算法解决一个问题时,要注意:理解和定义问题,控制问题的复杂度,将其分解为更容易解决的子问题。解决问题的步骤叫做算法。在计算机科学领域,我们用算法这个词来描述一种有限、确定、有效的并适合用于计算机程序来实现的解决问题的方法。计算机的计算和存储资源是有限的,所以只能解决部分的数学理论问题。要定义一个算法,我们可以用自然语言描述解决某个问题的过程,或着使用某个程序设计语言来实现这个过程。以计算两个非负整数p和q的最大公约数为例。自然语言描述原创 2022-02-10 01:33:01 · 641 阅读 · 0 评论