数据结构与算法
迫壳
混吃等死
展开
-
前缀树简单使用
前缀树每个结点由 int pass ; int end ; node [] nexts = new node[26]; 构成Pass:表示此结点被通过的次数End:表示路线在此节点结束Nexts:表示此结点后面的结点,26对应26个字母,一开始为空,当有路线会通过结点时会新建出来. 比如说 有一个b字母在此结点的后面 则nexts[1] = new node(); nexts[1].pass++;构建前缀树有什么用?其中一个最重要的作用是:可以判断以路线为前缀的字符串有多少个。.原创 2021-09-22 23:27:35 · 99 阅读 · 0 评论 -
找到含有环形单链表中环开始的结点
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null第一个思路[dangerbox title="标题内容"]遍历单链表,将其加入到set集合中,当下次遇到的第一个重复的结点即为入环的结点[/dangerbox]//寻找链表中环的第一个结点public ListNode detectCycle(ListNode head) { if(head == null) return null; Set<ListNode> s = new Hash..原创 2021-09-22 23:29:06 · 130 阅读 · 1 评论 -
大根堆排序
大根堆排序(HeapSort)每个根结点都比子树的任意结点大将数组当成一个完全二叉树 比如说:[2,5,8,7,6,9,1]25 87 6 9 1我们需要调用两个方法:heapInsert插入和hepify重排heapInsert插入:从最后一个元素开始从下往上 找自己的头结点,如果比头结点大,则与其交换(头结点的位置 = 现结点位置-1 >>1)举个例子:1比自己的头结点8小,所以不动 9比头结点大,所以交换hepify重排(当我们改变ind..原创 2021-09-22 23:28:42 · 576 阅读 · 0 评论 -
二分法与异或的使用
异或的使用:概念:相同为0,不相同为1 (简单记忆:不进位相加即为异或)比如说:00011010(异或)10010100= 10001110[danger]用法:a^0 = a a^a=0 a^a^a=a[/danger]实例:一、两个数互换 (a,b) 则可以这样操作:a = a ^ b , b = a^b (此时得到b等于a) , a = a ^ b(此时得到a等于b) 二、找到一个数组中唯一为奇次数的哪个数 [ 1,1,2] 此时唯一为奇...原创 2021-09-22 23:28:25 · 134 阅读 · 0 评论 -
力扣:最长回文串
力扣题编码:5https://leetcode-cn.com/problems/longest-palindromic-substring/[h2title]上代码[/h2title]publicStringlongestPalindrome(Strings){Stringstr="";char[]arr=s.toCharArray();for(inti=0;i<arr.length;i++)...原创 2021-09-21 18:31:48 · 52 阅读 · 0 评论 -
力扣:比较版本
今天做一道名为:比较版本号 的题,发现了一个转义字符的问题题目为:力扣编号165(比较版本号)比较两个版本号 version1和 version2。如果version1>version2返回1,如果version1<version2 返回 -1, 除此之外返回 0。你可以假设版本字符串非空,并且只包含数字和. 字符。. 字符不代表小数点,而是用于分隔数字序列。例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。你可以假...原创 2021-09-21 18:25:39 · 120 阅读 · 0 评论 -
使用dfs解决填算式问题
今天刷到一个填算式的问题,发现用dfs处理特别的容易!!!填算式问题是什么呢!先给我们一个式子 比如说:☆☆☆ + ☆☆☆ = ☆☆☆ 比如:596 + 142 = 738题目给的条件是这填式子的这几个数字是不可以重复的,所以我们这里有9个空,那么我们所需要填的数字就是1,2,3,4,5,6,7,8,9好了上代码public class dfs1 { //因为我们的数字是不能够重复的,所以我们需要一个数组来表示这个数字是否被访问//下标 0对应数字1 下...原创 2021-09-21 18:20:57 · 105 阅读 · 0 评论 -
深度搜索的思想
深度优先搜索(depth-first-search),简称 dfs,应该算是应用最广泛的搜索算法,属于图算法的一种。dfs 按照深度优先的方式搜索,通俗的说就是“一条路走到黑”。dfs 是一种穷举的手段,实际上就是把所有的可行方案列举出来,不断去试探,直到找到问题的解,其过程是对每一个可能的分支路径深入到不能再深入为止,而且每个顶点只能访问一次。话不多说上模板:void dfs(int deep) {if (到达边界) {// 做一些处理后返回} else {for(所有可能的选择)原创 2021-09-21 18:12:37 · 178 阅读 · 0 评论 -
广度搜索-bfs
今天我们整一个俄罗斯的广度搜索题,帮助大家理一理写广度搜索题的思路描述给你一个n行m列的二维迷宫。'S'表示起点,'T'表示终点,'#'表示墙壁,'.'表示平地。你需要从'S'出发走到'T',每次只能上下左右走动,并且不能走出地图的范围以及不能走到墙壁上。请你计算出走到终点需要走的最少步数。输入第一行输入n,m表示迷宫大小。(1≤n,m≤100)接下来输入n行字符串表示迷宫,每个字符串长度为m。(地图保证有且仅有一个终点,一个起始点)输出输出走到终点的最少步数,如果不能走到终点输原创 2021-09-21 18:08:49 · 80 阅读 · 0 评论