![](https://img-blog.csdnimg.cn/20210813110434167.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 53
数据结构与常见算法文章分享
CrazyFox%
这个作者很懒,什么都没留下…
展开
-
拓扑排序问题总结
1. 题目来源题目原创 2021-09-13 08:35:12 · 244 阅读 · 0 评论 -
栈-核心基础算法题总结(c++)
目录1. 有效的括号2. 最小栈3. 回文链表1. 有效的括号https://leetcode-cn.com/problems/valid-parentheses/思路:栈, 左括号进,右括号出class Solution {public: bool isValid(string s) { // 1.初始化准备 stack<char> stk; unordered_map<char, char>.原创 2021-07-19 11:24:09 · 152 阅读 · 1 评论 -
C++面试准备汇总
1、多态、虚函数原理、纯虚函数、析构函数可以使用虚函数吗?答:(1)分为编译时多态(编译时就确定),比如函数重载就是这种情况,通过参数类型或数量不同可以实现;还有运行时多态(运行时才确定),使用虚函数机制,可以通过父类指针来调用派生类的函数,(2)具体实现机制是每个对象存在一个虚函数表,调用函数时会通过这个虚函数表去查询具体需要调用哪个版本的函数;(3)纯虚函数是指基类没有提供函数的定义需要派生类自行实现,普通虚函数时基类存在一个版本的函数(4)对于存在派生关系的类的析构函数应该使用虚函数,因为这原创 2020-09-13 09:26:38 · 1258 阅读 · 0 评论 -
剑指offer中待学习的知识点
1、数组中只出现一次的数字知识点:哈希法原创 2020-07-20 15:14:34 · 92 阅读 · 0 评论 -
链表核心算法-c++程序
1. 反转链表1.1 版本1/** * @file main.cpp * @author Crazyfox * @brief 反转链表 * @version 1.0 * @history * 1.Date: 2021-07-15 * Version: 1.0 * Modification: First release * @copyright Copyright (c) 2021 * */#include <iostream>#includ原创 2021-07-15 20:46:20 · 98 阅读 · 0 评论 -
动态规划核心算法题(c++)
1. 0-1背包0-1背包升级版2. 三角形中最短路径leetcode题目链接原创 2021-08-12 10:11:43 · 103 阅读 · 0 评论 -
回溯算法题目总结(c++)
1. 八皇后2. 0-1背包可以使用回溯,虽然不是最好的解决办法2.2 0-1背包改造版3. 正则表达式4. 深度优先搜索5. 图的着色6. 旅行商问题7. 数独8. 全排列原创 2021-08-11 16:40:36 · 320 阅读 · 0 评论 -
分治算法总结(c++)
0. 算法总结分治算法用四个字概括就是“分而治之”,将原问题划分成 n 个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。1. 逆序度求解leetcode题目2.二维平面上有 n 个点,如何快速计算出两个距离最近的点对?3.有两个 n*n 的矩阵 A,B,如何快速求解两个矩阵的乘积 C=A*B?...原创 2021-08-10 17:22:58 · 454 阅读 · 0 评论 -
c++输入输出总结
1. 输入: 1 2 3 4 5#include <bits/stdc++.h>using namespace std;int main() { // 输入:1 2 3 4 5 string item; while (cin >> item) { cout << item << " "; if (getchar() == '\n') break; } return 0;}原创 2021-08-06 18:35:32 · 341 阅读 · 0 评论 -
字符串匹配算法(leetcode)
一. 基本题目leetcode 28 easy1. BF算法(暴力匹配)class Solution {public: int strStr(string haystack, string needle) { // 0.异常处理 if (0 == needle.size()) return 0; // 1.初始化准备 int m = haystack.size(); int n = needle.size原创 2021-08-06 10:58:43 · 701 阅读 · 0 评论 -
贪心算法leetcode重点题目
1. 分饼干leetcode 455 easy思路:每次优先满足胃口最小的孩子(因为目的是尽量满足越多的孩子,只和数量有关);而且在满足孩子胃口的前提下,尽量用尺寸最小的饼干(因为结果相同)具体实现:每次都有找最小值,可以使用优先队列,注意是小顶堆(需要更改比较函数)class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) {原创 2021-08-06 10:23:51 · 65 阅读 · 0 评论 -
huffman(霍夫曼编码)
1. 基本思想按照字符出现的频率编码,比如有3个字符,就可以用2个比特来表示,不过随着字符数量的增加,比特数也会增加,有可能会浪费空间,所以进一步用更少的比特表示频率更高的字符,用更多的比特表示频率更低的字符,但是这样会有一个问题是再解码时不知道到底要对多少个字符进行解码,所以进一步引出霍夫曼编码,通过构建二叉树,从频率最小的字符开始,结点值为字符出现的频率,先将所有频率对应一个结点放入队列中,每次取出最小的2个合并,将合并的结点加入队列,重复这个过程,直到队列为空,最终编码的时候左子树编码为0,右子树原创 2021-08-05 16:35:57 · 418 阅读 · 0 评论 -
图核心算法(c++)
1. 图的遍历leetcode207这道题对应拓扑排序,有向图是否有环的问题1.1 BFS(广度优先搜索)第一次做法class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { // 0.初始化准备 unordered_set<int> temp; vector&原创 2021-08-04 10:45:07 · 249 阅读 · 0 评论 -
堆核心算法(c++)
以数组存放,下标从0开始,大顶堆为例1. 堆化(往堆中插入一个元素)// 大顶堆,数组存放数据,从0开始存放数据class Heap {private: vector<int> data; int count; //堆中已存储的数据个数public: Heap(int capacity) : data(vector<int>(capacity)), count(0) { } void insert(int in) { .原创 2021-08-02 10:50:57 · 208 阅读 · 0 评论 -
二叉树核心算法题(c++)
一、二叉树的遍历1.前序遍历144题/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullpt原创 2021-07-31 19:18:42 · 118 阅读 · 0 评论 -
哈希算法核心算法题(c++)
1. 手写LRU缓存淘汰算法leetcode题目原创 2021-07-30 14:53:17 · 141 阅读 · 0 评论 -
二分查找核心算法(c++)
1. 基本原理1.1 循环实现/** * @brief 循环实现二分查找 * @param nums 数据 * @param target 查找目标 * @return 找到目标则返回下标,否则返回-1 */int BSearch(const vector<int> &nums, int target) { int low = 0; int high = nums.size() - 1; while (low <= high)原创 2021-07-28 15:03:53 · 256 阅读 · 0 评论 -
排序核心算法(c++)
一、平均时间复杂度为O(n^2)的算法1. 冒泡排序void BubbleSort(vector<int> &data) { // 1 辅助变量 bool flag; //若某一次循环不需要交换说明已经完全有序,提前结束 int tmp; // 2 正式排序 for (int i=1; i<data.size(); ++i) { flag = true; for (int j=0; j<data原创 2021-07-23 15:19:02 · 319 阅读 · 0 评论 -
C++ 链表知识总结
C++ 链表知识总结1、创建链表1、创建链表一般创建链表都会设置一个虚拟头节点,也叫做哨兵创建链表需要一个头节点,一个当前节点,而头节点设置为哨兵的话,当前节点就可以直接初始化为头节点,最后返回哨兵的next即可,这样的做法可以简化代码,因为这样就不用当前处理当前节点为空节点的情况。链接:https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337?answerType=1&f=discussion来源原创 2020-07-28 22:07:45 · 207 阅读 · 0 评论 -
归并排序学习笔记
参考:https://zhuanlan.zhihu.com/p/124356219原创 2020-07-11 11:30:39 · 158 阅读 · 0 评论 -
图的遍历之DFS与BFS
图的遍历之DFS与BFS1、DFS2、BFS参考:https://blog.csdn.net/qq_36528734/article/details/83475059图的遍历:从图的任一顶点出发,对图中的所有顶点有且访问一次1、DFS深度优先搜索,从某个点一直往深处走,走到不能往下走之后就回退到上一步,直到把所有点走完。2、BFS广度优先搜索,从某个点一直把其邻接的点走完,然后任选一个与之邻接的未被遍历的点走完,如果反复走完所有节点。类似于树的层序遍历。...原创 2020-07-06 15:57:47 · 145 阅读 · 0 评论 -
字符串的排列
字符串的排列1、字符的全排列2、C++——set涉及知识包括了字符的全排列和set容器的使用1、字符的全排列参考:https://www.jianshu.com/p/621fb1bccd1c可以用递归三部曲完成:(1)确定边界条件:当固定到字符串最后一个索引位置时,保存或者输出字符串,完成一次排列(2)当前递归返回什么?不需要返回值(3)当前递归做什么?循环遍历固定当前索引的字符,使用交换完成操作,如果字符被交换到当前索引位置,就是说当前索引位置被固定了,继续固定下一个索引位置,在循环体内交原创 2020-07-05 17:59:27 · 155 阅读 · 0 评论