![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 65
海滩油炸
G_Roboter | Slam
展开
-
c++实现矩阵乘法
之前一直对于c++实现矩阵乘法保持敬畏....因为没有自己写过,今天动手实践了一波.感觉对于vector初始化的方式是一个重点vector<datatype>(5,0);除此之外,就是一坨坨的for循环#include <iostream>#include <vector>using namespace std;int main(){ int rowA, colA, colB; int& rowB = colA;//[r原创 2021-07-03 05:01:46 · 385 阅读 · 0 评论 -
从partition到Quicksort
本文主要讨论quicksort和寻找第k大元素的两个相关问题。力扣连接https://leetcode-cn.com/problems/sort-an-array/【排序算法精华3】快速排序 (上)_哔哩哔哩_bilibili"五点七边-算法学习" QQ交流群:539835344快速排序(英语:Quicksort),简称快排,是一种排序算法,最早由东尼·霍尔提出。正如它的名字所暗示的那样,快速排序的最大优点在于它的速度非常快。在实现的比较好的时候,快速排序往往比归并排序、堆排序等优秀的排序算法更快...原创 2021-09-22 03:52:45 · 306 阅读 · 0 评论 -
(组合,子集)回溯法的三步走
理论:递归和回溯通常相辅相成,在递归的时候通常需要回溯。回溯法是一种暴力搜索的方法。。。可以解决的问题包括:组合问题,排列问题,切割问题,子集问题,棋盘问题。关于回溯法,可能遇到的情况有时一变化就蒙了。。。所以,重要的是找到形而上的方法去解决问题。回溯法技巧性也很强。首先通常我们的目标是得到满足一定条件的各种情况的具体内容。但是,针对每道题,我们都要分析三步。0. 用图可视化回溯过程1. 确定递归函数的参数和返回值2. 确定递归的终止条件--避免死循环3. 确定单层搜索的原创 2021-09-04 14:25:33 · 192 阅读 · 0 评论 -
数据结构学习⑥.2--二叉树深度优先遍历(递归和非递归c++)
遍历的三种方式:中序遍历,前序遍历, 后序遍历中序遍历:先遍历最左边的叶节点,然后遍历其根节点,再去遍历右节点.在图中,从1开始,往左下方2,往左下方4.这时候空了,所以回到2,再去2的右边,到5,到7,回到5,到8,这时候回到1,再去3,去6所以顺序为: 4 ->2 ->7 ->5 ->8 ->1 ->3 ->6递归的实现,有递归和非递归/迭代的两种方式,其中,迭代的方式相对简单,因为其实遍历的过程,就是左边中间右边的重复顺序,所.原创 2021-08-15 22:18:19 · 283 阅读 · 1 评论 -
算法学习①:DFS/深度优先搜索
首先以leetcode为导向,关于dfs最经典的问题就是N-queen.问题描述:N*N的棋盘放置N个棋子,棋子之间不能相互攻击,(不能位于相邻对角线,同一行,同一列)思路:从第一行开始,往接下来的行搜索,找到答案或者发现此路不通后返回....原创 2021-08-05 17:13:23 · 172 阅读 · 0 评论 -
算法学习③:DP/动态规划算法
今天重新复习一下动态规划算法, 虽然学数据结构与算法一般用java,但是,我还是决定用c++和python分别实现一下.概念理解动态规划按我的理解,其实就是以空间换时间,从而极大地减少复杂度. 其套路一般是寻找到状态转移方程, 然后, 通过状态转移, 填充一个数组,而最后题目的答案往往就是数组中的某一个元素.与之对比的,我们可以考虑一下递归的思路,从某种意义上与动态规划正好相反, 递归的思路就"分而治之",将大问题自上而下拆分为小问题,然后去解决,而动态规划则是一开始去解决小问题,然后以此来解决原创 2021-07-25 02:39:24 · 221 阅读 · 0 评论 -
算法学习②: BFS/广度优先遍历
BFS的思想通常可以帮助我们更好的理解树的结构,比如深度,是否是完全二叉树等.注意,不同于DFS,处理BFS的问题时,通常我们更喜欢用的数据结构是queue==> 先进先出.比如求二叉树的最大深度 leetcode链接在这一题中,我们要能分辨不同层的节点,所用的方式就是记录当前遍历层的node数.然后当它变为0后,再去遍历,并且让层数加1./** * Definition for a binary tree node. * struct TreeNode { * int原创 2021-08-16 13:34:15 · 176 阅读 · 0 评论 -
数据结构学习①--链表
链表的基本操作包括插入搜索和删除做链表题目需要提前考虑的问题Leetcode链表经典题目1. 分隔链表 leetcode_86本题的技巧,要用dummy node,其他的没了....很straightforward/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), nex...原创 2021-08-17 02:09:30 · 119 阅读 · 0 评论 -
数据结构学习②--哈希表
由于实际地址空间小于关键值地址,会发生碰撞,我们可以通过链表扩展地址.开放地址法发生碰撞时,把值存到下一个地址,二次散列时,通常会使用不同的方式如果设计好的散列函数需要进行一定的数据分析.比较典型的有除法散列当我们插入元素的时候, 可能会直接插入,也可能需要将元素加入链表中. 为了计算时间复杂度,我们会采用平均时间复杂度.当我们需要额外的排序时,需要使用map,否则使用unordered map如何自己实现一个散列表?...原创 2021-08-17 15:28:46 · 78 阅读 · 0 评论 -
数据结构学习④--字符串
字符串相关数组和函数无重复子串 Leetcode_3思路: 用hashmap巧妙地去记录 各个字符上次出现的位置. 注意,当位置出现在0的时候,我们该如何考虑?class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char,int> hashMap; int max_len=0; int tmp_len..原创 2021-08-29 19:04:27 · 90 阅读 · 0 评论 -
数据结构学习⑤--栈和队列
理论基础栈 --后进先出的线性表栈顶元素:唯一可访问的元素入栈顺序和出栈顺序正好相反栈的储存形式数组实现: 顺序表的简化版链表实现:用单链表方式存储,其中指针的方向是从栈顶向下链接用途:栈常用来处理递归结果的数据深度优先搜索 表达式求值 操作系统函数调用的管理队列:先进先出的线性表 (两次后进先出等于一次先进先出)优先队列(最大/最小堆值)头尾元素:队头: 删除操作对尾: 插入操作队列操作:入队列: enQ..原创 2021-08-29 00:14:55 · 112 阅读 · 0 评论 -
数据结构学习⑥--树
相关术语树可以被看做图的一种特例, 即"有向无环图"根节点 (root node)父节点(parent node)n个子节点(child node)节点的度 (degree)叶节点(leaf node)边 (edge node)路径 (path)子树(subtree)层数(level)最常见的树--二叉树最多有两个子节点的树(binary tree)满二叉树 (full binary tree):除最后一层无任何子节点外,每一层上的所有结点..原创 2021-08-29 18:44:04 · 295 阅读 · 0 评论