数据结构算法刷题
LiuxkK
Make peogress.
展开
-
堆
堆堆是什么?堆是一种特殊的完全二叉树。所有父结点都比子结点要小的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。【堆的创建】把n个元素建立一个堆,首先我们可以将这n个结点以自顶向下、从左到右的方式从1到n编码,即以层序遍历的顺序编码,这样就可以把这n个结点转换成为一棵完全二叉树。紧接着从最后一个非叶结点(结点编号为n/2)开始到根结点(结点编号为1...转载 2020-05-03 17:49:20 · 214 阅读 · 0 评论 -
刷题之回溯法:累加数问题
问题描述:累加数是一个字符串,组成它的数字可以形成累加序列。一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给定一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是累加数。说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。示例 1:输入: “1123...原创 2020-04-17 22:20:32 · 333 阅读 · 0 评论 -
二叉树的相关常考操作
二叉树的相关操作二叉树的模版struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){ }};前序遍历递归版//前序遍历,递归void pre(T...原创 2020-04-14 17:27:20 · 146 阅读 · 0 评论 -
链表的相关常见操作
链表的常见相关操作链表的反转 两种方式递归非递归#include <iostream>struct node{ int data; struct node *next;};typedef struct node LIST;//循环的链表的反转LIST * reverseList(LIST *phead){ LIST *pnow = phead...原创 2020-04-14 15:50:52 · 135 阅读 · 0 评论 -
打牌问题(回溯)
题目描述打牌过程中可以出单张,对子,五张顺子,三组连对,问最少多少次出完牌。题解:#include <iostream>#include <vector>using namespace std;void dfs(vector<int> &cards, int times, int &least, vector<vector&...原创 2020-04-14 00:30:36 · 290 阅读 · 0 评论 -
利用队列实现栈(中等)
使用一个队列class MyStack {public: //单链表实现 //在栈中元素的顺序应该是和队列中的顺序相反的,因此整体的思路是元素插入后,将插入元素之前的所有元素出队列重新入队列,这样就可以吧顺序调转过来,这样元素的顺序就一致了,栈中的其他操作就和队列中的操作一致了。时间复杂度为O(n)。 /** Initialize your data structure...原创 2020-04-14 00:26:56 · 86 阅读 · 0 评论 -
递增的三元子序列(中等)
题目描述给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入...原创 2020-04-14 00:20:24 · 110 阅读 · 0 评论 -
连续最长增长序列(简单)+最长上升子序列问题(中等)+最长上升子序列的个数(中等)
最长上升子序列问题(中等)题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n lo...原创 2020-04-14 00:15:56 · 792 阅读 · 0 评论