数据结构与算法
文章平均质量分 81
个人学习记录
YHY_13s
这个作者很懒,什么都没留下…
展开
-
leetcode
1,两数之和【哈希表】【unodered_map】实现记录了之前的结果,每次添加都和之前的比较一次class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int >hashmap; for(int i=0;i<nums.size();i++){ aut原创 2021-05-18 09:01:09 · 118 阅读 · 0 评论 -
高级数据结构-字典树-并查集-线段树
一,字典树1.指针数组2.路径存储,不是结点二,并查集图的深搜0.并查集概述并查集(Union Find),又称不相交集合(Disjiont Set),它应用于N个元素的集合求并与查询问题,在该应用场景中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。虽然该问题并不复杂,但面对极大的数据量时,普通的数据结构往往无法解决,并查集就是解决该种问题最为优秀的算法。1.数组实现并查集(查找与合并)2.森林原创 2021-05-13 14:52:42 · 279 阅读 · 0 评论 -
动态规划
找零钱1.状态转移【枚举所有和dp[i]有关的状态】2.更新最优解3.前一状态是否可以达到五,三角形1.二维dp2.从下往上,更少考虑边界,【反向思维】六,最长上升子序列方法一,1.两个状态i,思考和最大子段和的相似之处2.下标和个数差1【老问题了】3.动态规划边界方法二,1.用vector实现的栈2.二分查找优化,【index=-1】七,最小路径和1.处理一下边界,才能好递归2.与【五,三角形的相似之处】八,地牢游戏1.两个方向思考2.由左上到右下:因为有两个重要程原创 2021-05-11 22:11:45 · 173 阅读 · 0 评论 -
深度搜索DFS和广度搜索BFS
一,岛屿数量1.方向数组2.二维标记数组(记录是否到达过,不要走重复了)3.限制条件,没有到过,周围是陆地4.DFS和BFS两种方法二,词语阶梯1-最短转换步数1.理解为一张【图】2.图的宽度优先搜索-最短路径<顶点,步数>3.map构造邻接表,各点之间的连接,i和j错开一位三,词语阶梯2-最短转换路径1.记录路径的宽搜vector实现的队列保存所有的结点,pop结点时不会丢失对头元素在队列节点中增加该节点的前驱节点在队列中的下标信息,可通过该下标找到是队列中的哪个节点搜原创 2021-05-10 14:57:23 · 132 阅读 · 0 评论 -
哈希表与字符串
字符哈希哈希表排序整数拉链法解决冲突,使用头插法一,最长回文串1.用数组实现哈希:即下标为key,对应的值为value2.是否有中心点,及其计算,比较讨巧class Solution {public: int longestPalindrome(string s) { int char_map[128]={0}; int max_length=0; int flag=0;//是否有中心点 for(int i=0;i<原创 2021-05-07 21:54:23 · 401 阅读 · 0 评论 -
二分查找与二叉树排序
二分查找【递归】二分查找【循环】有回溯时候最好递归一,插入位置处理边界二分基本框架二,区间查找把求区间【拆解】成左右端点处理边界三,旋转数组查找两个接上?》首尾相连判断旋转区间边界情况情况很多很复杂四,二叉查找(排序)树中序遍历是从小到大的如何插入结点插入到二叉查找树中五,二叉查找数的编码和解码二叉查找树前序遍历与复原整形转为字符串六,逆序数(用归并做过)1.分治思想2.记录左子树数量二叉查找树3.将元素按照原数组逆置后的顺序插入到二叉查找树中,如何在元素插入时原创 2021-05-04 10:45:27 · 331 阅读 · 0 评论 -
二叉树-图
一,路径之和2LeetCode 113. Path Sum II a.二叉树的深度遍历b.二叉树的广度遍历c.先序-中序-后序遍历1.使用何种数据结构存储遍历路径上的节点?2.在树的前序遍历时做什么?后序遍历时做什么?3.如何判断一个节点为叶结点?当遍历到叶结点时应该做什么?/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left原创 2021-05-02 21:51:06 · 179 阅读 · 0 评论 -
递归-回溯-分治
求子集class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int> >result;//存储最终的结果,返回值 vector<int> item;//回溯时,产生各个子集的数组 result.push_back(item);//加入空集原创 2021-04-29 22:22:24 · 170 阅读 · 0 评论 -
贪心算法
一,钞票支付问题倍数关系二,分糖果1.贪心规律,学会贪心思考三,摇摆序列1.自动机状态状态改变时len++四,移除K个数字1.看数据规模,就是贪心算法2.运用栈存储结果或删除3.两层循环的复杂度?4.字符与整数相互转换5.各种特殊情况要考虑一下五,跳跃游戏-a1.无法直观的观察出从第0个位置开始依次向后的跳跃方式【该跳哪儿】2.该贪什么,怎么贪从第0个位置,应该跳至第1、第2、…、第i-1、第i个位置中的哪个?应该跳至第1、2、…、i-1、i位置中【又可向前跳至更最远位置】原创 2021-04-26 17:54:36 · 347 阅读 · 0 评论 -
栈,队列,堆
一,使用队列实现栈LeetCode 225. Implement Stack using Queu二,使用栈实现队列LeetCode 232. Implement Queue using Stacks 临时队列将元素逆序临时队列将元素逆序三,包含min函数的栈LeetCode 155. Min Stack 用最小值栈的栈顶记录了数据栈各个状态下的最小值四,合法的出栈序列 poj 1363 Rails五,简单的计算器LeetCode 224. Basic Calculato原创 2021-04-23 17:00:30 · 138 阅读 · 0 评论 -
链表
一,链表整体逆序思路:代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) :原创 2021-04-19 21:59:34 · 177 阅读 · 0 评论