数据结构
文章平均质量分 63
ziqiiii
念念不忘必有回响;欲速则不达;千里之堤溃于蚁穴
展开
-
约瑟夫问题---- 约瑟夫环
5727. 找出游戏的获胜者约瑟夫问题约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。然后轮到B报数,他报2。非常惨,他被杀了C接着从1开始报数接着轮到A报数,他报2。也被杀死了。最终胜利者是C解决方案普通解法刚学数据结构的时候,我们可能用链表的方法去模拟这转载 2021-04-11 17:55:20 · 600 阅读 · 0 评论 -
位运算
1. 位运算介绍2. 位运算操作原创 2020-05-04 15:55:24 · 104 阅读 · 0 评论 -
LeetCode2
1. 并查集原创 2020-05-05 21:48:06 · 127 阅读 · 0 评论 -
Leetcode
191. 位1的个数原创 2020-05-04 16:07:29 · 153 阅读 · 0 评论 -
391,回溯算法求组合问题
39. 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。candidates 中的数字可以无限制重复被选取。示例1:输入: candidates = [2,3,6,7]target = 7所求解集为:[ [7], [2,2,3]]示例2:...转载 2021-04-07 22:14:30 · 145 阅读 · 0 评论 -
最大公约数
辗转相除法:int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }原创 2021-04-04 12:14:16 · 140 阅读 · 0 评论 -
并查集【路径压缩 + 按秩合并】模板
class UF { public int[] parent; // parent[i] i 的 父节点 public int[] size; // i 所在的连通分量的大小,为了union的时候,将小树的root连接到大树的root下 public int count; // 有几个连通分量 public UF (int n) { count = n; parent = new int[n]; siz.原创 2021-01-16 23:35:47 · 108 阅读 · 0 评论 -
2021-01-11经典的八皇后问题和N皇后问题, 回溯
八皇后的来源八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解。八皇后问题最早是由国际象棋棋手马克斯·贝瑟尔(Max Bezzel)于1848年提出。第一个解在1850年由弗朗兹·诺克(Franz Nauck)给出。并且将其推广为更一转载 2021-01-11 11:08:43 · 466 阅读 · 0 评论 -
贪心算法
四种基本算法:贪心算法分而治之算法(递归思想)动态规划暴力出奇迹算法(穷举思想)贪心算法的三步走!第一步明确到底什么是最优解?明确下来之后用小本本记下来!第二步明确什么是子问题的最优解?再用小本本记下来!第三步分别求出子问题的最优解再堆叠出全局最优解?这步不用记!贪心算法三个核心问题!!!一、为什么不直接求全局最优解?(因为原问题求不到全局最优解,所以才有贪心算法)总结一下使用贪心算法的前提:1、原问题复杂度过高;2、求全局最优解的数学模型难以建立;3、求全局最优解的转载 2020-12-20 09:19:22 · 165 阅读 · 1 评论 -
数据结构-树
基础知识树是一个有n个有限节点组成一个具有层次关系的集合,每个节点有0个或者多个子节点,没有父节点的节点称为根节点,也就是说除了根节点以外每个节点都有父节点,并且有且只有一个。树的种类比较多,有二叉树,红黑树,AVL树,B树,哈夫曼树,字典树等等。甚至堆我们也可以把它看成是一棵树,树的这么多种类中,我们最常见的应该是二叉树了,下面我们来看一下他的结构。定义: 结点的度:一个结点含有的子结点的个数称为该结点的度; 叶结点或终端结点:度为0的结点称为叶结点;..转载 2020-12-13 00:21:09 · 169 阅读 · 0 评论 -
回溯算法
什么叫回溯算法对于回溯算法的定义,百度百科上是这样描述的:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。看明白没,回溯算法其实就是一.转载 2020-12-09 22:42:38 · 1183 阅读 · 0 评论 -
代码模版
1. 递归2. 二分查找3. 动态规划DP原创 2020-05-03 16:28:02 · 243 阅读 · 0 评论 -
LeetCode 51. N皇后 (Java)
冲突示例:pie(撇)代表 左斜冲突;na(捺)代表右斜线冲突;class Solution { public List<List<String>> solveNQueens(int n) { List<List<Integer>> colPos = new ArrayList<List<...原创 2020-05-03 13:22:14 · 316 阅读 · 0 评论 -
数据结构 时空间复杂度对比
https://www.bigocheatsheet.com/原创 2020-04-25 13:38:36 · 252 阅读 · 0 评论 -
数据结构(六)图(二)
六、图1.图的基本概念、名词术语;2.图的邻接矩阵存储方法和邻接表(含逆邻接表)存储方法的构造原理及特点;3.图的深度优先搜索与广度优先搜索;4.最小(代价)生成树、最短路径、AOV网与拓扑排序的基本概念。/* 邻接表存储 - 拓扑排序算法 */ bool TopSort( LGraph Graph, Vert...原创 2019-10-31 14:39:18 · 209 阅读 · 0 评论 -
数据结构(八)内排序
1.排序的基本概念,各种内排序方法的基本原理和特点,包括排序过程中进行的元素之间的比较次数,排序总趟数、排序稳定性以及时间复杂度与空间复杂度计算;2.插入排序法(含折半插入排序法);3.选择排序法;4.(起)泡排序法;5.谢尔(Shell)排序法;6.快速排序法;7.堆积(Heap)排序法,包括堆积的定义与构造;...原创 2019-10-12 12:27:24 · 168 阅读 · 0 评论 -
剑指Offer----链表中倒数第k个结点 (java实现)
题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路:首先得对输入值进行判断是否合法,错误输入有2种:1. 输入链表为空,k不是正数,2. k值大于链表长度,返回“倒数第k个结点”已经没有意义了。解法1: 倒数第k个,正着数应该是:第length-k+1个,按顺序输出解法2: 使用2个指针,前面的先走k步,然后两指针一起走,当前面当指针指向链...原创 2019-07-28 23:25:03 · 263 阅读 · 0 评论 -
全排列算法--递归&字典序实现(Java)
全排列算法-递归&字典序实现全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。例如:1 、2 、3三个元素的全排列为:{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。解法1(递归)如下图:要对1、2、3、4进行...转载 2019-09-03 20:53:29 · 1167 阅读 · 1 评论 -
LeetCode ---- 5. 最长回文子串 (java)
方法一:暴力求解,时间复杂度O(n^3)暴力法将选出所有子字符串可能的开始和结束位置,并检验它是不是回文。空间复杂度:O(1)class Solution { public String longestPalindrome(String s) { String maxS = new String(); for(int i = 0; i&...原创 2019-09-01 16:04:17 · 371 阅读 · 0 评论 -
LeetCode ---- 198. 打家劫舍 (java)
动态规划:取舍问题开辟f[n]数组,保存当前偷窃前n个房屋的最大金额。1. 最后状态,f[n]的值,可以对nums[n]取或者不取2. 转移方程为:f[n] = max( f[n-1], f[n-2] + nums[n]) // 不取,取 , n>=23. 初始条件:f[0] = nums[0],f[1] = max(nums[0], nums[1])...原创 2019-09-01 12:35:59 · 228 阅读 · 0 评论 -
LeetCode ---- 572. 另一个树的子树 (迭代/递归, java,c++)
判断二叉树是否是另一棵二叉树的子树方法一:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }...原创 2019-08-31 22:31:52 · 370 阅读 · 0 评论 -
LeetCode ---- 695.岛屿的最大面积
题目:给一个矩阵数组,0表示海洋,1表示陆地,上下左右都是1表示连通的一块陆地,斜对角的不算。求陆地最大面积。如:{0,1,1,0,1,0,0},{1,0,0,1,1,1,0},{1,1,0,0,1,1,0},{0,1,1,0,0,1,1}有3块陆地,面积分别是:2,8,4最大陆地面积为:8package xxxx;import java.util....原创 2019-08-30 21:36:42 · 399 阅读 · 0 评论 -
LeetCode ---- 102. 二叉树的层次遍历 ( java, c++)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { p...原创 2019-08-30 21:39:00 · 176 阅读 · 0 评论 -
LeetCode ---- 145. 二叉树的后序遍历 ( 递归 / 迭代,java / c++)
方法一:递归实现方法二:迭代实现 /* * 因为根节点是最先处理的,但要最后输出,所以可用将各个节点入栈2次,当节点出栈时栈顶与出栈节点的值不一样时,打印输出。 * * 总思路就是把根、右子树、左子树都压入栈中2次 * 每次循环释放一个栈中元素,如果释放的和栈顶元素相同证明没有被操作过~~ * 就分别将其右子树和左子树都压入栈中。...原创 2019-08-27 22:07:48 · 747 阅读 · 0 评论 -
LeetCode ---- 94. 二叉树的中序遍历 (递归/迭代 , java / c++)
方法一:递归调用方法二:迭代实现c++:// ref:https://hit-alibaba.github.io/interview/basic/algo/Tree.htmlvector<int> inorderTraversal(TreeNode* root) { TreeNode *p = root; vector&l...原创 2019-08-27 22:07:34 · 208 阅读 · 0 评论 -
LintCode----191. 乘积最大子序列
191. 乘积最大子序列https://www.lintcode.com/problem/maximum-product-subarray/求最值,用动态规划解题。解题步骤:1. 确定状态: (但凡动规,都要开辟数组存下当前状态。递归则不需要存状态,因为它每次递归都会重新计算,所以运算量远远大于动规解法)因为要求乘积最大,可以开个一维数组res[], res[i]保存当...原创 2019-08-18 00:55:15 · 162 阅读 · 0 评论 -
动态规划 训练 (LintCode)(三)
(3)116. 跳跃游戏public class Solution { /** * @param A: A list of integers * @return: A boolean */ public boolean canJump(int[] A) { // write your code...原创 2019-08-17 21:48:52 · 106 阅读 · 0 评论 -
动态规划 训练 (LintCode)(二)
(2) 114. 不同的路径public class Solution { /** * @param m: positive integer (1 <= m <= 100) * @param n: positive integer (1 <= n <= 100) * @re...原创 2019-08-17 21:30:23 · 108 阅读 · 0 评论 -
LeetCode ---- 72. 编辑距离 (java)
求最值,动态规划题。用dp[i][j]表示从word[0...i]转换到word[0...j]的最小操作,使用动态规划求解class Solution { public int minDistance(String word1, String word2) { int row = word1.length(); ...原创 2019-09-08 11:57:47 · 260 阅读 · 0 评论 -
LeetCode ---- 200. 岛屿数量 (java)
方法: 广度优先搜索线性扫描整个二维网格,如果一个结点包含 1,则以其为根结点启动广度优先搜索。将其放入队列中,(方法一改变原来的网格:并将值设为 0 以标记访问过该结点;方法二不改变原来网格:新开一个二维数组保存是否访问该结点)。迭代地搜索队列中的每个结点,直到队列为空。我这边做法是新开一个二维数组保存是否访问该节点。package xxxx;impor...原创 2019-09-10 12:38:09 · 218 阅读 · 0 评论 -
数据结构(七)文件及查找
1.顺序查找法以及平均查找长度(ASL)的计算;2.折半查找法以及平均查找长度(ASL)的计算,包括查找过程对应的“判定树”的构造;3.散列(Hash)表的构造、散列函数的构造,散列冲突的基本概念、处理散列冲突的基本方法以及散列表的查找和平均查找长度的计算。...原创 2019-10-09 20:30:08 · 525 阅读 · 0 评论 -
数据结构(五)树与二叉树-----堆
typedef struct HNode *Heap; /* 堆的类型定义 */struct HNode { ElementType *Data; /* 存储元素的数组 */ int Size; /* 堆中当前元素个数 */ int Capacity; /* 堆的最大容量 */};typ...原创 2019-10-05 17:15:47 · 107 阅读 · 0 评论 -
数据结构(六)图(一)
六、图1.图的基本概念、名词术语;2.图的邻接矩阵存储方法和邻接表(含逆邻接表)存储方法的构造原理及特点;3.图的深度优先搜索与广度优先搜索;4.最小(代价)生成树、最短路径、AOV网与拓扑排序的基本概念。...原创 2019-10-05 17:16:09 · 234 阅读 · 0 评论 -
数据结构(五)树与二叉树(三)
掌握要求:(1,2,3,4内容见:数据结构(五)树与二叉树(一))1.树与二叉树的基本概念,基本特征、名词术语;2.完全二叉树与满二叉树的基本概念,二叉树的基本性质及其应用;3.二叉树的顺序存储结构与二叉链表存储结的基本原理;4.二叉树的前序遍历、中序遍历、后序遍历和按层次遍历,重点是二叉树在以二叉链表作为存储结构基础上各种遍历算法(包括非递归算法)的设计与应用;5.二叉排序树...原创 2019-10-04 19:29:40 · 130 阅读 · 0 评论 -
数据结构(五)树与二叉树(二)
掌握要求:(1,2,3内容见:数据结构(五)树与二叉树(一))1.树与二叉树的基本概念,基本特征、名词术语;2.完全二叉树与满二叉树的基本概念,二叉树的基本性质及其应用;3.二叉树的顺序存储结构与二叉链表存储结的基本原理;4.二叉树的前序遍历、中序遍历、后序遍历和按层次遍历,重点是二叉树在以二叉链表作为存储结构基础上各种遍历算法(包括非递归算法)的设计与应用;5.二叉排序树的基...原创 2019-10-02 17:00:53 · 125 阅读 · 0 评论 -
数据结构(五)树与二叉树(一)
掌握要求:(4,5内容见:数据结构(五)树与二叉树(二))1.树与二叉树的基本概念,基本特征、名词术语;2.完全二叉树与满二叉树的基本概念,二叉树的基本性质及其应用;3.二叉树的顺序存储结构与二叉链表存储结的基本原理;4.二叉树的前序遍历、中序遍历、后序遍历和按层次遍历,重点是二叉树在以二叉链表作为存储结构基础上各种遍历算法(包括非递归算法)的设计与应用;5.二叉排序树的基本概...原创 2019-10-02 16:52:00 · 146 阅读 · 0 评论 -
数据结构(四)队列
掌握要求:1.队列的基本概念与基本操作;2.队列的顺序存储结构与链式存储结构的构造原理;3.在不同存储结构的基础上对队列实施插入与删除等基本操作的算法设计;4.队列在解决实际问题中应用。队列的顺序存储实现:采用循环数组。取余数决定数组下标...原创 2019-09-29 20:31:06 · 107 阅读 · 0 评论 -
数据结构(三)堆栈Stack
掌握要求:1.堆栈的基本概念与基本操作;2.堆栈的顺序存储结构与链式存储结构的构造原理;3.在不同存储结构的基础上对堆栈实施插入与删除等基本操作的算法设计;4.堆栈在解决实际问题中应用。堆栈应用:1. 中缀表达式转后缀表达式:...原创 2019-09-29 20:20:53 · 168 阅读 · 0 评论 -
数据结构(二)线性表 (顺序存储结构与链式存储结构)
二、线性表(掌握纲要)1.线性关系、线性表的定义,线性表的基本操作;2.线性表的顺序存储结构与链式存储结构(包括单(向)链表、循环链表和双向链表)的构造原理;3.在以上两种存储结构的基础上对线性表实施的基本操作,包括顺序表的插入与删除、链表的建立、插入与删除、查找等操作对应的算法设计(含递归算法的设计)。具体内容:1.线性关系、线性表的定义,线性表的基本操作;...原创 2019-09-28 21:46:45 · 1539 阅读 · 0 评论 -
数据结构(一)概述
(材料来源:1. 中国大学mooc网 浙江大学《数据结构》;2. 北京航天航空大学《数据结构》课件数据结构掌握内容要求)1.数据的逻辑结构与存储结构的基本概念;2.算法的定义、基本性质以及算法分析的基本概念,包括采用大O形式表示时间复杂度和空间复杂度。...原创 2019-09-27 11:20:17 · 107 阅读 · 0 评论