
数据结构/算法
算法真不会
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
高精度加减乘除
高精度加法#include <iostream>#include <vector>using namespace std;vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.size()) return add(B, A); vector<int> C; int t = 0; for (i原创 2022-01-17 16:10:06 · 217 阅读 · 0 评论 -
最长重复子数组
class Solution {public: int findLength(vector<int>& A, vector<int>& B) { vector<vector<int>> dp (A.size() + 1, vector<int>(B.size() + 1, 0)); int result = 0; for (int i = 1; i <= A.siz..原创 2022-01-17 16:02:19 · 515 阅读 · 0 评论 -
最长公共子序列
class Solution {public: int longestCommonSubsequence(string text1, string text2) { vector<vector<int>> dp(text1.size()+1, vector<int>(text2.size()+1, 0)); for(int i = 1; i <= text1.size(); i++) {...原创 2022-01-17 15:42:58 · 149 阅读 · 0 评论 -
返回和为目标值的二叉树的路径
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<int> > result; void compare(vector<int>& p.原创 2022-01-17 14:15:31 · 227 阅读 · 0 评论 -
判断是否存在二叉树中和为某一值的路径
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root TreeNode类 * @param sum int整型 * @return bool布尔型 */ bool hasPathSum(TreeNod.原创 2022-01-17 14:11:16 · 165 阅读 · 0 评论 -
按之字形打印二叉树
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<int> > Print(TreeNode* root) .原创 2022-01-17 14:09:17 · 128 阅读 · 0 评论 -
二叉树前中后自测
遍历//递归遍历//先序void recursion_dlr(binarynode* root){ if (root==NULL) { return; } //遍历根节点 cout<<root->ch<<"\t"; //遍历左子树 recursion_dlr(root->lchild); //遍历右子树 recursion_dlr(root->rchild);}//中序void recursion_ldr(binarynode*原创 2022-01-17 14:06:29 · 138 阅读 · 0 评论 -
归并排序模板
#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N], tmp[N];void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = (l + r)/2; //递归排序左右区间 merge_sort(q, l, mid), merge_sort(q, mid + 1, r); //原创 2021-07-07 17:07:29 · 140 阅读 · 0 评论 -
快速排序模板
第一种边界void quick_sort(vector<int>& q,int l, int r) { if(l >= r) return; int i = l - 1, j = r + 1, x= q[(l+r+1)/2]; while(i < j) { do i++; while(q[i] < x); do j--; while(q[j] .原创 2021-07-07 15:39:53 · 114 阅读 · 0 评论 -
【动态规划】基础练习(lc509,lc70,lc746,lc62,lc63,lc343,lc96)
动态规划——基础题目力扣509.斐波那契数题目描述思路分析代码实现普通版优化版(空间复杂度优化到O(1))力扣70.爬楼梯题目描述思路分析代码实现普通版优化版(空间复杂度优化到O(1))力扣746.使用最小花费爬楼梯题目描述思路分析代码实现力扣62.不同路径题目描述思路分析代码实现力扣63.不同路径Ⅱ题目描述思路分析代码实现力扣343.整数拆分题目描述思路分析代码实现力扣96.不同的二叉搜索树题目描述思路分析代码实现力扣509.斐波那契数题目描述思路分析dp【i】的含义就是第 i 个斐波那契数的原创 2021-06-02 21:12:22 · 431 阅读 · 2 评论 -
【DFS+剪枝】【Aw842.排列数 & Aw843.N-皇后问题】
DFS练习aw842.排列数题目描述思路分析代码实现aw843.N-皇后问题题目描述思路分析代码实现aw842.排列数题目描述题目链接:https://www.acwing.com/problem/content/844/思路分析代码实现#include<iostream>using namespace std;const int N = 10; int n;int path[N];//保存序列bool state[N];//位置是否被用过void dfs(i原创 2021-06-09 16:24:50 · 1280 阅读 · 12 评论 -
C++之map和set总结
map和set总结1.关联式容器2.键值对3.树形结构的关联式容器3.1 set介绍3.1.1set的使用3.2map1.关联式容器STL中比如:vector、list、deque、forward_list(C++11)等,这些都是序列式容器,因为底层都是线性序列的数据结构,里面存储的是元素本身关联式容器也是用来存储数据的,与序列式容器不同的是,里面存储的是<key,value>结构的键值对在数据检索时比序列式容器效率更高2.键值对用来表示具有一一对应关系的一种结构,该结构中一原创 2021-05-31 22:56:38 · 676 阅读 · 1 评论 -
二叉树的非递归遍历怎么写?
非递归实现二叉树的遍历二叉树的前序遍历题目:力扣144.二叉树的前序遍历代码实现:二叉树的中序遍历题目:力扣94.二叉树的中序遍历代码实现:二叉树的后序遍历题目:力扣145.二叉树的后序遍历代码实现:二叉树的前序遍历前序遍历是根-->左-->右,每次先处理的是中间节点,那么先将跟节点放⼊栈中,然后将右孩⼦加⼊栈,再加⼊左孩⼦为什么要先加入右孩子呢,因为出栈的顺序是先进后出,这样才能实现根--> 左--> 右的出栈顺序题目:力扣144.二叉树的前序遍历代码实现:cla原创 2021-05-17 14:24:37 · 403 阅读 · 7 评论 -
高阶数据结构 | 二叉搜索树(Binary Search Tree)
二叉搜索树(Binary Search Tree)1.二叉搜索树的概念2.二叉搜索树的特性3.二叉搜索树的简单实现3.1二叉搜索树的查找3.2二叉搜索树的插入3.3二叉搜索树的删除3.4实现的源代码整合4.二叉搜索树两种模型的简单实现4.1 K模型4.2 K,V模型5.二叉搜索树的性能分析1.二叉搜索树的概念二叉搜索树又叫二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的原创 2021-05-15 16:17:14 · 740 阅读 · 11 评论 -
LeetCode 145.二叉树的后序遍历
二叉树的后序遍历题目描述代码实现题目描述代码实现左子树—右子树—根节点class Solution {public: void traversal(TreeNode* cur, vector<int>& vec) { if (cur == NULL) return; traversal(cur->left, vec); // 左 traversal(cur->right, vec); // 右原创 2021-01-27 11:38:48 · 205 阅读 · 0 评论 -
LeetCode 94.二叉树的中序遍历
二叉树的中序遍历题目描述代码实现题目描述代码实现左子树—根节点—右子树class Solution {public:void traversal(TreeNode* cur, vector<int>& vec) { if (cur == NULL) return; traversal(cur->left, vec); // 左 vec.push_back(cur->val); // 根原创 2021-01-27 11:36:08 · 124 阅读 · 0 评论 -
LeetCode 144.二叉树的前序遍历
二叉树前序遍历题目描述代码实现题目描述代码实现根节点—左子树—右子树class Solution {public: void traversal(TreeNode* cur, vector<int>& vec) { if (cur == NULL) return; vec.push_back(cur->val); // 根 traversal(cur->left, vec)原创 2021-01-27 11:33:25 · 120 阅读 · 0 评论 -
数据结构---实现队列的操作
队列1.队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头2.队列的实现队列也可以用数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低Queue.htypedef int QDataType;typedef struct QueueNode{原创 2021-01-08 16:12:41 · 260 阅读 · 1 评论 -
数据结构---实现栈的系列操作
栈1.栈的概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵守后进先出原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈/弹栈,出数据也在栈顶。2.示意图栈中数据出栈入栈Stack.c//初始化void StackInit(Stack* pst){ assert(pst); /*pst->_a = NULL; pst->_t原创 2021-01-08 15:07:56 · 239 阅读 · 0 评论 -
数据结构---实现带头双向循环链表增删查改
List.h#pragma oncetypedef int LTDataType;#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef struct ListNode{ struct ListNode* next; struct ListNode* prev; LTDataType data;}ListNode;//初始化ListNode* ListInit();//cl.原创 2021-01-07 20:43:52 · 239 阅读 · 0 评论 -
数据结构---实现顺序表增删查改
顺序表1.概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数据存储。在数组中完成数据的增删查改2.优缺点优点:1.可以随机访问2.缓存利用率比较高(访问数据时预加载数据到缓存)缺点:1.中间或者头部的插入删除很慢,需要挪动数据。时间复杂度是O(N)2.空间不够时增容导致的空间浪费SeqList.h#pragma once#include<stdio.h>//在这里写是为了防止在seqlist.c和test.c中再次输入 直接原创 2020-12-29 16:56:56 · 369 阅读 · 0 评论 -
数组相关面试题小结
思路:双指针遍历,idx和i,i不等于val,右移下一位,因为题目要求不能申请内存,所以不可以像注释那么写int removeElement(int* nums, int numsSize, int val){//int* newA=(int*)malloc(numsSize*sizeof(int));int idx=0;for(i=0;i<numsSize;++i){if(nums[i]!=val)nums[idx++]=nums[i];}//memcpy(nums,newA,.原创 2020-10-22 19:38:23 · 335 阅读 · 0 评论 -
数据结构---时间复杂度与空间复杂度
时间复杂度和空间复杂度总结1.算法效率2.时间复杂度3.空间复杂度1.算法效率算法效率分两种,时间效率和空间效率,即时间复杂度和空间复杂度,前者衡量算法运行速度,后者衡量算法所需要的额外空间2.时间复杂度2.1基本概念算法中的时间复杂度是一个函数,定量描述了算法运行时间总结下来就是:算法种基本操作的执行次数关注点:操作的数量级/基本操作的执行次数①执行时间和硬件资源强相关,不同硬件处理速度有差异②CPU每秒钟执行操作在亿级以上3.空间复杂度...原创 2020-10-13 22:55:32 · 256 阅读 · 0 评论 -
排序算法分析(直插,折半,希尔)
一.排序分类根据排序时数据所占用存储器的不同,可将排序分为两类。一类是整个排序过程完全在内存中进行,称为内部排序;另一类时由于待排序数据量太大,内存无法容纳全部数据,排序需要借助外部存储设备才能完成,成为外部排序。二.插入类排序插入排序的基本思想:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序插入到已排好序的记录子集中,直到将所有待排记录全部插入为止。2.1直接插入排...原创 2020-05-06 15:08:19 · 403 阅读 · 0 评论