基础算法和数据结构
文章平均质量分 74
大学学习的数据结构的经历,作业比较繁忙,有时间的话会多写一些注释。
油菜花的菜
这个作者很懒,什么都没留下…
展开
-
Trie树总结
文章目录前言一、Trie树/字典树/前缀树二、代码1.Trie树节点字符节点数字节点其它插入和查询操作1.插入操作2.查询操作3.一般题目不会考察的这么简单,一般会在查询上做做变形。总结 前言 前缀树,字典树,Trie树都是指同一个数据结构。 提示:以下是本篇文章正文内容,下面案例可供参考 一、Trie树/字典树/前缀树 是一棵 N 叉树。前缀树用于存储、查找字符串。前缀树的每一个结点代表一个字符串的前缀。每一个结点会有多个子结点,通往不同子结点的路径上有着不同的字符。子结点代表的字符串是由结点本原创 2021-11-01 14:33:52 · 141 阅读 · 0 评论 -
蓄水池采样
蓄水池采样前言一、蓄水池抽样算法原理二、题目练习1.链表随机节点3822.随机数索引(398)总结 前言 给定一个数据流,数据流长度NNN非常大,且NNN直到处理完所有数据之前都不可知,要求遍历一遍就可以找到目标值。 一、蓄水池抽样算法原理 原理:蓄水池抽样是一系列的随机算法,其目的在于从包含 nnn个项目的集合 SSS 中选取 kkk 个样本,其中 nnn 为一很大或未知的数量,尤其适用于不能把所有 nnn 个项目都存放到内存的情况。 二、题目练习 1.链表随机节点382 给定一个单链表,随机选择链原创 2021-10-18 15:19:06 · 195 阅读 · 0 评论 -
基数排序总结
计数排序前言一、计数排序优点二、题目练习leetcode912. 排序数组总结 前言 计数排序是一个非基于比较的排序算法,优势在于在对一定范围内的整数排序时,它的复杂度为O(n+k)Ο(n+k)O(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n∗log(n))O(k)>O(n*log(n))O(k)>O(n∗log(n))的时候其效率反而不如基于比较的排序 一、计数排序优点 1.非比较。 2.排序范围较小,并原创 2021-10-17 12:56:55 · 230 阅读 · 0 评论 -
算法中栈用法总结
栈 前言: 从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性表操作的子集,它是操作受限的线性表,因此,可称为限定性的数据结构。限定它仅在表尾进行插入或删除操作。表尾称为栈顶,相应地,表头称为栈底。 栈的基本操作除了在栈顶进行插入和删除外,还有栈的初始化,判空以及取栈顶元素等。 栈是支持递归的重要的数据结构,很多程序都需要这个看起来简单,但是也发挥着巨大作用的数据结构。 文章目录栈前言一、解题方法二、题目练习1.移掉 K 位数字(Leetcode402-medium)贪心和动态规划比较总结原创 2021-10-13 00:29:07 · 235 阅读 · 0 评论 -
滑动窗口总结
前言 滑动窗口指的是这样一类问题的求解方法,在数组上通过双指针同向移动而解决的一类问题。其实这样的问题我们可以不必为它们专门命名一个名字,它们的解法其实是很自然的。 本质:使用滑动窗口解决的问题通常是暴力解法的优化,掌握这一类问题最好的办法就是练习,然后思考清楚为什么可以使用滑动窗口。 滑动窗口前言一、解题方法二、题目练习1.替换后的最长重复字符(leetcode424题)2.找到字符串中所有字母异位词 一、解题方法 滑动窗口基于暴力算法 1、如何暴力? 2、如何证明滑动窗口的单调性? 3、窗口中需要原创 2021-10-09 18:42:23 · 116 阅读 · 0 评论 -
C++ bitset总结
数据结构bitset 术语:某1位置位是置1,某一位复位是某一位清零。 文章目录数据结构bitset一、3种初始化方式二、位访问三、位操作四、 位集操作总结实战练习 一、3种初始化方式 bitset<32> tmp; //默认构造函数,默认全0。 bitset<32> tmp(-1); //从整形数构造 bitset<32> tmp("101"); //从包含1和0的字符串构造 二、位访问 bitset<32> tmp(256)原创 2021-10-08 23:01:44 · 483 阅读 · 0 评论 -
Leetcode373猜数字大小2
问题描述: 我们正在玩一个猜数游戏,游戏规则如下:我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例 : n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。 第三轮: 你猜是9,我告诉你,我的数字原创 2021-10-06 20:10:18 · 334 阅读 · 0 评论 -
Leetcode371题两数之和
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。 示例 1: 输入:a = 1, b = 2 输出:3 示例 2: 输入:a = 2, b = 3 输出:5 提示: -1000 <= a, b <= 1000 解题代码: class Solution { public: int getSum(int a, int b) { if (!a) return b; // a+b=a^b, (a&b)<<1为零原创 2021-10-05 22:29:16 · 71 阅读 · 0 评论 -
Leetcode372-超级次方
你的任务是计算 aba^bab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。 示例 1: 输入:a = 2, b = [3] 输出:8 示例 2: 输入:a = 2, b = [1,0] 输出:1024 示例 3: 输入:a = 1, b = [4,3,3,8,5,2] 输出:1 示例 4: 输入:a = 2147483647, b = [2,0,0] 输出:1198 解题代码 class Solution { public: const int p =原创 2021-10-05 22:18:10 · 85 阅读 · 0 评论 -
数据范围反推算法复杂度和算法
一般笔试题的时间限制是1秒或2秒,在这种情况下,C++代码中的操作次数控制在 107∼10810^7∼10^8107∼108 为最佳,在此基础上可以推出题目要考查的算法。 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: n<=30n <= 30n<=30 可以推出题目的最佳时间复杂度为指数级别,反推考察的算法有::: dfs+dfs+dfs+剪枝或状态压缩dpdpdp。 n<=100n <= 100n<=100 可以推出题目的最佳时间复杂度为O(n3)转载 2021-10-04 21:47:07 · 273 阅读 · 0 评论 -
排序算法-快排
快速排序 快排是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序,快排的思想是基于分治。 算法流程: 选取分分界值。 左边将大于等于分界值的数据移动到数组右边,右边将小于等于分界值的数据移动到左边。 在左边区域内选取一个分界值并在该区域内重复1、2操作,在右边区域内选取一个分界值重复1、2操作操作。 重复上面过程,直到各个区域无法分解。 代码实战: 题目: 给定你一个长度为 n 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 数据范围: 1原创 2021-10-04 20:57:19 · 87 阅读 · 0 评论 -
表达式计算
1. 问题描述 表达式是数据运算的基本方式。人们书写习惯是中缀式如:11+22*(7-4)/3。中缀式的计算是按照运算符的优先级及括号优先的原则,相同级别从左到右计算。表达式还有后缀式(如:22 7 4 / 11 +)和前缀式(如:+ 11 / * 22 – 7 4 3)。后缀表达式和前后最表达式中没有括号给计算带来方便。如后缀式计算时按运算符出现的先后顺序进行计算。本设计的主要任务是进行表达式形...原创 2020-01-12 00:58:13 · 1554 阅读 · 0 评论 -
顺序队列
#include <iostream> #include <exception> #include "marco_define.h" using namespace std; template<class T> void CheckBad_alloc(T* ptr); template<class T> class Seq_queue { p...原创 2019-12-26 14:33:55 · 61 阅读 · 0 评论 -
C++实现栈
(原创,引用请声明) 本人目前还在读大学,若对代码有疑问,评论即可,我会一一回复,若有不足,还请大佬指正。 #pragma once #ifndef SEQSTACK_H #define SEQSTACK_H #include <iostream> #include <exception> using namespace std; void OverflowInfo(); ...原创 2019-12-23 09:06:51 · 136 阅读 · 0 评论