
算法与数据结构
文章平均质量分 78
算法与数据结构
摇花手当雨伞
重铸双非荣光,吾辈义不容辞
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
位图算法的简单实现
位图算法的简单实现一.原理二.算法实现一.原理位图算法是一种利用比特位来判断一个数是否存在的算法,比特位为一则表示该数存在,为零则不存在。如下图,存在数 1,3,5,7,10,13 。所以这些数的比特位都被置为一。不存在的数对应的比特位则被置为零。比如我可以分配 15 字节的内存用来实现位图算法,15 字节的内存一共有 15 * 8 个比特位,也就是 120 个比特位,所以我可以表示数字 0到119 是否存在。注意是从 0 开始,所以只能表示到 119 。二.算法实现#include <原创 2022-04-18 19:51:12 · 498 阅读 · 0 评论 -
二叉树的遍历
二叉树的三种遍历1.前序遍历2.中序遍历递归版非递归版3.后序遍历前言:图片与部分代码来自力扣1.前序遍历2.中序遍历递归版class Solution {public: void dfs(TreeNode* node,vector<int>& ret){ if(!node) return; dfs(node->left,ret); //遍历左子树 ret.push_back(node->v原创 2022-04-10 16:40:08 · 519 阅读 · 0 评论 -
关于回溯法的理解与总结
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。原创 2022-03-19 16:00:39 · 1270 阅读 · 0 评论 -
力扣笔记----寻找数组中重复的数字
1.题目描述2.思路解析可能大家一开始想到的方法就是找到一个数字,然后将它与数组中的数字一一比较,如果有重复的就将它输出。没有就继续遍历下去。但显然,这样的效率较低。深入思考一下我们会发现如果我们在按序遍历的时候用一个临时数组将前面的元素存储起来,再将之后的元素与这个临时数组中的元素比较。如果该数组中有与这个元素重复的,那么数组nums中也有,就不用与整个数组中的元素比较。如果没有就将这个元素存储在临时数组中。再继续遍历下去。继续优化一下我们可以发现我们没必要将数字的值存储在数组中,只需要做一个标记原创 2021-04-17 16:31:37 · 431 阅读 · 0 评论 -
动态规划总结篇一
动态规划总结篇一1.什么是动态规划2.动态规划使用情景一——求极值问题1.思路分析2.代码实现1.什么是动态规划摘自leetcode动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于朴素解法。动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下原创 2021-12-03 21:36:39 · 1296 阅读 · 0 评论 -
对于Rabin-Karp算法(旋转哈希)的一些理解
1.传统方式下的一般思路常用于滑动窗口下字符串的匹配问题。对于一个长度为m的字符串,若要找到定长(固定长度)为n的一个子字符串,最坏情况下则要遍历m-n次,每次需比较n个字符。所以时间复杂度为O((m-n)*n),当n相对于m来说较小时。就可以把(m-n)看成m。所以时间复杂度即为O(mn)。如下图:若要在长度为22的字符串中找到短字符串ae,则要构建一个长度为2的滑动窗口,比较滑动窗口中的字符串是否为要找到的字符串,每次需比较两个字符串。若不是,则滑动窗口右移一位,重复比较的过程。直至找到该子字符原创 2021-10-25 21:18:24 · 906 阅读 · 0 评论 -
递归模型总结一——链表问题
递归模型总结一——链表问题1.前言2.反转链表1.问题描述2.代码解析3.递归模型解析2.回文链表1.问题描述2.代码解析3.递归模型解析1.前言对初学递归的人来说,递归无疑是很不好理解的,本系列旨在对常见算法中使用的递归做一定程度的解析,学习这些算法的同时,总结出其递归模型。以便于加深对递归的理解,同时,当我们掌握了多种递归模型。那无论何时需要使用递归解决问题,我们都能从已有的递归模型中得到一些启发。或者相似的场景使用的模型是一样时(类似于数学或物理中的建模,通过对具有某类特征的事物的分析原创 2021-12-28 09:29:17 · 267 阅读 · 0 评论 -
数据结构总结一——堆
数据结构总结——堆1.堆的基本概念2.代码讲解1.堆的构建1.堆的基本概念摘自百度百科:堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。1.堆中某个结点的值总是不大于(最大堆)或不小于(最小堆)其父结点的值;2.堆总是一棵完全二叉树。从结构上看,堆是一棵完全二叉树。但它实际上是以完全二叉树的数组映射形式储存在数组中的。树中每个结点的值总是不大于(最大堆)或不小于(最小堆)其父结点的值。所以堆顶元素总是所有元素中的最大值或最小值原创 2021-12-09 21:33:29 · 1350 阅读 · 0 评论 -
递归模型总结三——快速排序
递归模型总结三——快速排序1.前言2.快速排序1.排序流程2.代码实现3.递归模型总结1.前言对初学递归的人来说,递归无疑是很不好理解的,本系列旨在对常见算法中使用的递归做一定程度的解析,学习这些算法的同时,总结出其递归模型。以便于加深对递归的理解,同时,当我们掌握了多种递归模型。那无论何时需要使用递归解决问题,我们都能从已有的递归模型中得到一些启发。或者相似的场景使用的模型是一样时(类似于数学或物理中的建模,通过对具有某类特征的事物的分析,总结出其一般规律,以便应用到具有相同特征的情况中去原创 2021-12-28 09:28:33 · 402 阅读 · 0 评论 -
递归模型总结二——归并排序
递归模型总结1.归并排序1.归并排序摘自百度百科归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。举个例子便于理解归并排序:有如下数据需要排序:{1,4,2,65,76,15,9,0,54,32};我们首先使用递归深度的将上述数据分割成不可分割原创 2021-11-21 20:49:20 · 1223 阅读 · 0 评论 -
常见算法思路及技巧总结一
常见算法与技巧1.前言2.整数运算技巧一:类似于快速幂的加法1.前言这篇算是我自己对《剑指offter》的总结吧,外加一些其他的算法。2.整数运算技巧一:类似于快速幂的加法问题:计算两数相除的商,但不能使用乘法与除法或者取余。可以使用类似于快速幂的加法技巧。举个例子16除以2,暴力思路是用2累加并计算累加次数,直至累加和大于或等于16 。使用类似于快速幂的加法则为:2加2等于4,此时累加次数为2 。再使用4进行加法计算4加4等于8,注意此时累加次数为2加2等于4,最后8加8为16,累加次数为原创 2022-02-08 19:51:29 · 2885 阅读 · 0 评论