数据结构
文章平均质量分 57
VioletEvergarden丶
努力为游戏行业发光发热
展开
-
二叉树序列化
通过字符串反序列化#include<iostream>#include<vector>#include<string>#include<algorithm>#include<queue>using namespace std;struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() :val(0), left(nullptr), right(原创 2021-09-19 21:59:38 · 121 阅读 · 0 评论 -
二叉树的路径
二叉树的路径二叉树所有路径路径总和1路径总和2路径总和3二叉树最大路径和二叉树最长相同路径二叉树的直径二叉树所有路径题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *原创 2021-09-19 16:19:59 · 166 阅读 · 0 评论 -
那些年我们一起处理过的IP地址
字符串处理验证IP地址复原IP地址验证IP地址题目链接class Solution {public: bool Ip4(string IP){ vector<string> ip; split(IP, ip, '.'); if(ip.size()!=4) return false; for(auto s: ip){ if(s.size()==0||s.size()>1&&am原创 2021-09-19 10:53:15 · 108 阅读 · 0 评论 -
括号系列问题
栈有效的括号有效括号升级版有效的括号题目链接class Solution {public: bool isValid(string s) { stack<char> st; unordered_map<char, char> hash={{')','('}, {']','['}, {'}','{'}}; for(auto c:s){ if(hash.count(c)==0){原创 2021-09-17 17:59:12 · 112 阅读 · 0 评论 -
删除链表倒数K节点与合并
#include <iostream>#include <vector>#include <unordered_map>#include <algorithm>#include <string>#include <sstream>using namespace std;struct ListNode { int val; ListNode* next; ListNode() :val(0), ne原创 2021-09-17 09:52:21 · 90 阅读 · 0 评论 -
最长串系列
最长串问题最长递增子序列最长连续递增子序列最长重复子数组最长公共子序列不相交的线最大子数组和不同子序列两个字符串删除操作编辑距离回文子串个数最长回文子串最长回文子序列最长递增子序列题目链接class Solution {public: int lengthOfLIS(vector<int>& nums) { //if (nums.size() <= 1) return nums.size(); vector<int>原创 2021-09-16 21:41:40 · 107 阅读 · 0 评论 -
实现计算器
class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ int solve(string s) { int res = 0; stack<int> sumStack; char sign =原创 2021-09-13 09:45:55 · 106 阅读 · 0 评论 -
C++进制转换(dl)
class Solution {public: /** * 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M, int N) { // write code here if(M == 0) return "0";//如果M=0就直接返回 bool flag原创 2021-09-13 09:41:13 · 208 阅读 · 0 评论 -
用最少的代码重建二叉树
重建二叉树由前序和中序重建由中序和后序重建由前序和中序重建题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { t原创 2021-08-26 17:26:09 · 105 阅读 · 0 评论 -
滑动窗口题型总结
滑动窗口长度最小子数组最小覆盖子串长度最小子数组题目链接用一个动态伸缩的滑动窗口来寻找满足target的子数组。核心是while循环里面的那个while循环,即为窗口收缩过程,并用一个变量来记录最小的子数组长度。class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int i=0,j=0; int n=nums.size();原创 2021-08-12 15:35:07 · 171 阅读 · 0 评论 -
C++实现LRU缓存
LRU代码代码#include<iostream>#include<list>#include<unordered_map>using namespace std;template <typename k, typename v>class LRU {public: typedef pair<k, v> Pair; typedef list<Pair> List; typedef unordered_map&l原创 2021-08-07 20:03:53 · 232 阅读 · 0 评论 -
缓存服务器 一致性哈希
一致性哈希普通哈希取模法改进哈希算法哈希偏斜虚拟节点普通哈希取模法假设三万张图片,要均匀存在三个缓存服务器上我们首先想到的是用哈希算法来使这些图片均匀分布在三个缓存服务器上用取模算法(模3算法),求得三种结果分别为0, 1, 2此时却是可以满足均匀分布但是,一旦要新加入新的服务器,此时取模算法面临失效的情况即以前已经存在缓存服务器上那些图片用新的模4算法,计算的哈希值与以前不同使得出现大面积图片未命中的情况(缓存雪崩)改进哈希算法为了解决上面面临的问题,我们需要模统一一个数,这样无论多原创 2021-07-20 09:32:43 · 151 阅读 · 0 评论 -
有关优先级队列的4道题 priority_queue
堆/优先级队列数组第k大的元素最小k个数前k个高频单词数据流的中位数数组第k大的元素题目链接两种堆的使用方法:使用元素总个数大小的小根堆,弹出k个元素后堆顶元素就是所有元素中第k大的元素。维护一个k大小的大根堆,这样堆中就是所有元素前k个最大元素,堆中元素依次弹出直到最后一个即为第k大的元素。下面的为方法一的代码实现class Solution {public: int findKthLargest(vector<int>& nums, int k) {原创 2021-07-11 18:59:27 · 1065 阅读 · 1 评论 -
深度优先搜索题型总结
这里写目录标题岛屿数量岛屿面积岛屿最大面积岛屿数量题目链接矩阵类型的遍历,可以采用DFS当发现满足条件的元素时(本题是元素为1时)开始遍历上下左右四个方向(题目要求斜方向不能组成岛屿)当这个位置遍历完成(主函数循环中的那个dfs),就说明这是一整个岛屿,周围没有满足条件的元素了注意的是:为了防止重复dfs,将遍历过的位置设为2(为啥不设为0,这是防止其他题目隐藏逻辑问题)class Solution { void dfs(vector<vector<char&g原创 2021-06-28 15:32:25 · 291 阅读 · 1 评论 -
7道题解决单调栈问题
单调栈下一个更大元素1下一个最大元素2每日温度移掉K位数字柱状图最大矩形接雨水下一个更大元素1题目链接维护一个单调递减栈,即当遍历元素大于栈顶元素时就要保存结果并弹出栈顶元素为了以子集数组1的顺序得出结果,我们需要对数组2操作时利用哈希表等来建立映射关系class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& num原创 2021-06-22 16:28:11 · 175 阅读 · 2 评论 -
7道题解决二分查找问题
二分查找顺序数组搜索一个值搜索插入位置排序数组查找元素第一个和最后一个位置找第一个大于目标元素的索引找最后一个比目标元素小的索引搜索旋转的排序数组搜索旋转的有重复排序数组找旋转数组最小值顺序数组搜索一个值二分查找最基本的思想,查找的区间必须有序本文全部按照闭区间来查找,此时while里面条件应该写为l<=r若按开区间查找(r=nums.size()),此时while里面条件应该写为l<r返回值-1表示未找到目标class Solution {public: int sea原创 2021-06-17 17:29:52 · 308 阅读 · 3 评论 -
三道题搞定螺旋矩阵
螺旋矩阵顺时针打印螺旋矩阵顺时针构造矩阵不定长步数的顺序打印矩阵坐标顺时针打印螺旋矩阵题目链接打印矩阵最关键的地方在于控制方向和避免重复打印许多题解用的二维矩阵来表示方向本文章全篇不用额外矩阵来控制方向,而通过每次要转弯时的动作逻辑来控制每次在转弯时,即碰到矩阵边界时,需要将下一个遍历方向前进一步,避免重复打印class Solution {public: vector<int> spiralOrder(vector<vector<int>>&原创 2021-06-17 10:16:32 · 117 阅读 · 0 评论 -
数组中数字出现的次数(三道题解决剑指offer中的位运算问题)
数组中数字出现的次数位运算基础性质第一题第二题第三题位运算基础性质&按位与:全1为1,其他为0|按位或:有1就1,全0才0^按位异或:不同为1,相同为0&一般用于寻找二进制下1的位置|一般用于改变一个二进制位置的值(参考布隆过滤器的使用)异或性质:6 ^ 0=6,6 ^ 6=0,2 ^ 2 ^ 3=2 ^ 3 ^ 2=3(交换律)补充:计算机中的负数为反码的补码举个int型例子,8位:-10的二进制:1000 1010;反码:1111 0101;补码:1111 0原创 2021-06-09 21:57:11 · 137 阅读 · 1 评论 -
跳跃游戏dg
跳跃游戏跳跃游戏 1跳跃游戏 2跳跃游戏 1leetcode题目链接题目要求只要达到最后一个位置就行,因此,只要保证每次都跳最远距离就可以确定是否能到最后一个位置step表示当前位置跳跃范围内,每个点能跳的最远距离,所以循环的遍历次数即为step,即要遍历当前位置能跳跃的范围内,找一个最远的跳跃点,直到跳跃范围达到或超过数组下标就证明为trueclass Solution {public: bool canJump(vector<int>& nums) {原创 2021-06-09 11:16:29 · 127 阅读 · 0 评论 -
深拷贝复制随机指针链表(字节原题)
题目链接leetcode 138复制这种复杂链表,需要两次遍历和一个哈希表第一次遍历将next指针穿起来,并将原链表和新链表的映射关系保存在哈希中第二次遍历通过操纵哈希表来建立random指针的随机指向问题代码如下:/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) { val = _val原创 2021-06-08 09:53:13 · 132 阅读 · 0 评论 -
删除有序数组k个重复项
删除有序数组k个重复项leetcode 26leetcode 80删除有序数组k个重复项leetcode 26删除有序数组重复项对于数组删除元素,不要删一个就移动后面所有的,这会使得时间复杂度过高应该定义一个无重复标记s,即s位置之前的所有元素都满足题目要求,for循环负责遍历,当碰到不满足题意的元素时,s标记保持不变,for循环继续向后遍历,直到碰到满足题意的元素时,将当前遍历的元素复制到s标记处此题若nums[s-1]==nums[i]时则不满足题意class Solution {publ原创 2021-06-07 10:19:35 · 224 阅读 · 0 评论 -
海量数据存储与查询之布隆过滤器
海量数据存储与查询提出问题如何存储海量数据布隆过滤器使用场景提出问题如何快速在亿级黑名单中快速定位URL地址是否在黑名单中?(每条URL平均64字节)目前有十亿数量的自然数,乱序排列,需要对其进行排序,在32位机器上完成,内存限制2G如何存储海量数据链表:O(1)的插入删除,O(n)的查找速度,由于过慢的查找速度所以不适合。散列表(hashmap):数组+链表/红黑树,具有优秀的查找速度。但是经过计算,一亿的int需要花费12GB+,因此全部无法放入内存中,不适合。假设存放1,3,5原创 2021-04-09 17:12:03 · 475 阅读 · 0 评论 -
AVL平衡二叉树原理与代码实现过程详解
AVL平衡二叉树什么时平衡二叉树二叉树的高度平衡因子四种旋转方式判断何时用何种旋转AVL节点删除AVL完整代码实现流程什么时平衡二叉树平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。//定义一颗平衡二叉树的节点template <class T>struct AVLtreeNode{ T data;原创 2021-03-29 15:52:03 · 312 阅读 · 1 评论