
数据结构与算法
文章平均质量分 66
唔嗯雯的学习笔记
这个作者很懒,什么都没留下…
展开
-
贪心算法——代码随想录
学习目的1.理解这种经典算法的基础理论和应用场景2.利用算法解决实际问题(一)贪心算法解决的问题数学归纳法;反证法。(二)回溯算法的基础一般解题的步骤①将问题分为若干个子问题②求出适合的贪心策略③求解出每一个子问题的最优解④将局部最优堆叠为全局最优解(三)例题1.分发饼干分发饼干(1)题目分析为了满足更多的小孩,就不要造成饼干的浪费。子问题:从后向前用饼干依次满足小孩的胃口。因为满足大胃口小孩的饼干一定能满足小胃口小孩的饼干。(2)代码实现a.遍历小孩的胃口数组饼干原创 2022-04-18 08:59:06 · 516 阅读 · 0 评论 -
2021年美团笔试第8场
2.偏爱字母(1)题目分析题目描述:一个只含有E和F的字符串,从中选取字母数量EF相差最大的子字符串输入:字符串的长度n,字符串的组成输出:最大差值(2)代码实现a.定义输入输出b.用一个数组记录EF子串中出现的次数c.当E的个数小于F的个数需要重新更新数组值,这是之前出错的地方。//贪心,像PAT的最大子列和那题,我的算法启蒙,浙大数据结构的第一讲#include<iostream>#include<string>using namespace std;原创 2022-04-07 16:32:35 · 248 阅读 · 0 评论 -
2021年美团笔试第9场
1.买蛋糕(1)题目分析背景描述:客户要买特定重量的蛋糕,并且这个重量是考好的最重和最轻的。输入:每天能考的蛋糕数n,已经考好的蛋糕数m,顾客要求的蛋糕质量a,b,已经烤好的蛋糕质量。输出:小团能否满足顾客需求。问题类型:多条件判断问题;元素排序问题(2)步骤a.读取输入数据n,m,a,b;b.读取m个值;c.将m个值排序d.将m个值的两端值与a,b进行比较情况一:最大或最小值不在[b,a]中,wrong;情况二:最大最小值在[b,a]之中,添加a,b通过数组长度来判断是否符合要求原创 2022-04-07 15:14:11 · 1680 阅读 · 0 评论 -
动态规划解决子序列系列问题——代码随想录
1.最长递增序列最长递增序列(1)题目分析找到最长严格递增子序列的长度,这里并没有要求连续,只是提到了相对位置关系。动态规划五部曲分析a.dp[i]的定义dp[i]表示i之前包括i的最长上升子序列的长度;b.状态转移方程if(nums[i]>nums[j]) dp[i] = max(dp[i],dp[j]+1);c.dp[i]初始化每一个i,对应的dp[i]最长上升子序列,起始大小至少是1;d.确定遍历顺序dp[i]是从0到i-1推导而来,那么一定是从前向后遍历。(2)代码实原创 2022-04-07 09:51:34 · 300 阅读 · 0 评论 -
C++中map和set系列元素操作
参考书籍《C++Primer》1.添加元素添加元素是指添加一个元素或者一个元素范围;返回值:对于map、set插入后会返回一个是否插入成功的bool值,若插入成功则会返回一个指向指定元素的迭代器。对于multi_**总是会插入,所以无需返回bool值;(1)setset的插入操作和之前熟悉的vector类似。 set<int> set1; //插入具体的数值 set1.insert(1); //插入一个范围 set1.insert(v1.b原创 2022-04-05 20:13:42 · 1849 阅读 · 0 评论 -
打家劫舍——动态规划——代码随想录
1、打家劫舍(1)题目描述:小偷沿街偷窃,影响偷窃的因素是相邻的房屋装有防盗系统,如果相邻房屋同一晚上被小偷闯入,系统会自动报警。总的目标:偷窃的金额最大【动态规划五部曲】a.确定dp数组以及下标的含义考虑下标i以内,最多可以偷窃的金额dp[i]b.确定递推公式如果偷第i个房间dp[i] = dp[i-2] + nums[i];如果不偷第i个房间dp[i] = dp[i-1];取这两者的最大值c.dp数组的初始化由递推公式可知dp[0]和dp[1]d.确定遍历顺序dp[i]是根原创 2022-03-21 11:43:16 · 1070 阅读 · 0 评论 -
数据结构与算法——排序算法
排序分为内部排序和外部排序1.冒泡排序冒泡排序(1)原理描述重复地走访要排序的数列、一次比较两个元素,如果他们的顺序错误就把他们交换过来。序列终止条件,重复地进行直到没有再需要较好为止。冒泡:越来越小的元素会慢慢“浮”到水面(2)相关代码步骤:a.用一个while外层循环和一个for内层循环对数组进行遍历b.按照顺序遍历数组判断相邻元素的元素大小c.记录是否发生交换,循环终止条件是遍历整个数组不再发生交换#include <iostream>using namespa原创 2022-02-26 17:48:01 · 635 阅读 · 0 评论 -
【数组】数据结构与算法——代码随想录
(一)理论基础数组时存放在连续内存空间上相同类型数据的集合注意点:a.数组下标都是从0开始b.数组内存空间的地址是连续的(二)相关例题1.二分查找二分查找题目中数组的特点是有序步骤:a.定义区间的两端d.对区间中的具体数值进行条件判断class Solution {public: int search(vector<int>& nums, int target) { int left = 0;原创 2022-02-24 10:55:19 · 663 阅读 · 0 评论 -
【第六章 树】——《大话数据结构》
(一)基本概念1.树的相关概念a.树的定义:树是n个结点的有限集,在任意非空树中,有且仅有一个特定根的节点结点拥有的子树数称为结点的度b.结点间的关系:结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。2.二叉树的定义n个结点的有限集合,该集合为空集,或者由一个根节点和两棵不相交的、分别为根结点的左子树和右子树的二叉树组成。3.二叉树的特点每个结点最多有两棵子树左子树右子树是有顺序的树中某结点只有一颗子树也要区分是左子树还是右子树4.二叉树的五种基本形态空二叉树只有一个根结点原创 2022-02-16 11:50:21 · 588 阅读 · 0 评论 -
【第四章 栈与对列】——《大话数据结构》
栈与队列-——代码随想录(一)栈(stack)1.相关基础概念栈是限定仅在表尾进行插入和删除操作的线性表;一端是栈顶(top)另一端是栈底(bottom)相关操作:理论上线性表的操作都具备,只是它的具体操作会有些变化,push等同于插入、pop等同于弹出、长度等同于Stacksize栈的作用:使得思考范围变小,聚焦要解决的问题栈的应用:递归(斐波那契数列)、四则运算表达式求值(逆波兰表示法定义)2.栈的存储结构(1)顺序存储两栈共享空间用一个数组存储两个栈,两个栈增加元素就是两端点向原创 2022-02-12 21:51:39 · 213 阅读 · 0 评论 -
【第三章 线性表】——《大话数据结构》
参考资料代码随想录-链表(一)顺序存储结构List :零个或多个数据元素的有限序列1.线性表相关操作:操作名称InitList(*L)初始化操作,建立一个空的线性表ListEmpty(L)线性表为空true,否则返回falseClearList(*L)将线性表清空GetElem(L,i,*e)将线性表L中的第i个位置元素返回给eLocateElem(L,e)在线性表中查找给定值e相等的元素,查找成功返回元素在表中的序号ListInsert原创 2022-02-12 21:00:58 · 574 阅读 · 0 评论 -
对数据结构的总体理解
参考资料《大话数据结构》书籍下载地址程序设计 = 数据结构+算法(一)数据结构1.基本概念和术语相似概念辨析名称解释举例说明数据计算机可操作的对象,能被计算机识别,并输入给计算机处理的符号集合网页是搜索引擎的数据数据对象性质相似的数据元素组成的集合,是数据的子集。人都有姓名、性别生日等相同的数据项数据元素组成数据的有一定意义的基本单位人类中的数据元素是人数据项一个数据元素可以由若干数据项组成,数据项是数据不可分割的最小单元人这个数据元素还有原创 2022-02-12 14:29:47 · 265 阅读 · 0 评论 -
【字符串】数据结构与算法——代码随想录
(一)相关基础知识1.字符串理解2.KMP算法a.主要思想:当字符串不匹配时,可以知道一部分之前已经匹配文本的内容(二)通用操作1.双指针法2.KMP(三)例题原创 2022-02-11 23:28:42 · 301 阅读 · 0 评论 -
【双指针法】数据结构与算法——代码随想录
(一)基础知识1.双指针的分类双指针不属于某一个特定类型的数据结构,双指针的效率优势在于在同一个数据上原地操作,具有空间优势。(二)相关例题1.移除元素数组中两指针,快指针用来遍历数组,慢指针用来记录移除元素后的数组;【概念理解上注意这个指针的意思是数组的下标】移除元素只是将数组占用的内存中的存放内容改变了2.反转字符串首尾元素两两交换,需要指标指向3.替换空格空格字符串单引号内还需要打一个空格4.反转字符串里的单词步骤:移除多余空格,将整个字符串反转,将每个单词反转5.反转链原创 2022-02-10 12:09:36 · 778 阅读 · 0 评论 -
【算法时间与空间复杂度】数据结构与算法
参考资料算法的时间与空间复杂度算法复杂度是用来衡量算法性能的指标(一)时间复杂度1.背景描述用单纯的运行时间描述算法性能受设备和具体测试样例差别较大。2.概念解释用一个新的符号来描述代码执行时间的变化趋势。3.常用的时间复杂度量级复杂度量级解释常数阶O(1)没有循环等复杂结构线性阶O(n)for循环里面的代码会执行n遍对数阶O(logN)对某些循环变量迭代的速度不一样平方阶O(n²)循环嵌套(二)空间复杂度1.背景用单纯的绝对内存占用原创 2022-02-10 10:17:20 · 199 阅读 · 0 评论 -
【哈希表】数据结构与算法——代码随想录
参考资料红黑树C++中set的用法auto关键字(一)哈希表基础知识1.定义:根据关键值直接进行访问的数据结构。2.应用:用来快速判断一个元素是否出现集合里。eg:日常学生表单中查询学生是否在名单上,就把学校里学生的名字都存在哈希表里,通过索引名字就可以查询。类比数组,将索引从下标变成其他任意你希望的样子,通过哈希函数完成这种对应关系。3.哈希碰撞:多对一的映射解决办法详细内容其他备注线性探测法哈希表的长度比数据长度适当的大一点如:同学1与同学2的名字在表中映射到原创 2022-02-06 09:45:58 · 855 阅读 · 0 评论 -
【链表】数据结构与算法——代码随想录
(一)链表基础知识1.组成:数据+指针2.类型:单链表、双链表、循环链表3.存储方式:分散存储(二)链表的通用操作1.节点定义struct ListNode{ int val; ListNode *next; ListNode(int x): val(x),next(NULL){}};初始化节点:ListNode*head = new ListNode()2.虚拟头结点手动设置一个虚拟头结点ListNode* dummyHead = new ListNode();3.双指针法原创 2022-02-05 12:50:57 · 463 阅读 · 0 评论