
数字结构和算法
总结一下自己练习leetcode题目的一些常见的数据结构和算法,以java为主,欢迎各位批评指正
stevia829
持续学习
展开
-
回溯算法小结(java)
回溯算法小结1.回溯算法定义:回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:找到一个可能存在的正确的答案;在尝试了所有可能的分步方法后宣告该问题没有答案;(来自维基百科)1.1 回溯算法和深度优先遍历回溯算法也叫 回溯搜索算法,「搜索」即「搜索原创 2020-12-11 21:34:16 · 421 阅读 · 3 评论 -
贪心+单调栈(Leetcode 402+316+321+1081)
贪心+单调栈(Leetcode 402+316+321+1081)这里总结了一下leetcode的三道题目,都是使用相似的思路,就是使用单调栈去逐步删除元素。402. 移掉K位数字给定一个以字符串表示的非负整数num ,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。思路:首先逐个比较,符合条件的放到双向列表里: for (int i = 0; i < length; i++) {原创 2020-12-02 20:55:36 · 244 阅读 · 1 评论 -
leetcode链表练习:分隔链表
leetcode链表练习:分隔链表题目:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5简单思路:既然需要对链表分隔,且需要保存相对位置,所以创建两个链表,分别用来存放大于等于x的节点和小于x的节点。之后将这两个链表合并即可原创 2020-11-26 16:51:23 · 188 阅读 · 0 评论 -
KMP算法--java实现
KMP算法–java实现与暴力算法的不同:暴力算法匹配不通过的时候就回到最前面KMP算法引入部分匹配函数的概念前缀:指除了最后一个字符以外,一个字符串的全部头部组合后缀:指除了第一个字符以外,一个字符串的全部尾部组合最大公共长度:指前缀和后缀中的最大共有元素,没有则为0匹配失败的时候,模式串j指针的位置= 模式串 T 的起始位置下标 + 部分匹配值所以步骤主要分为2步:求部分匹配表逐位比较,直到发现不匹配,或确定了完全匹配package com.stevia.basicAlgor原创 2020-11-26 11:42:10 · 263 阅读 · 2 评论 -
树的一些概念以及算法小结
树的相关总结树的基本概念合法的树不能形成无出口的回路n个互斥树的集合是森林度数:每个节点所有子树的个数层数:树的层数高度:树的最大层树。树叶或成终端节点:度数为0的节点就是树叶父节点:每一个节点有链接的上一层节点(即为父节点)子节点:每一个节点有链接的下一层节点为子节点祖先或子孙:所谓祖先是指从树根到该节点路径上所包含的节点,子孙是该节点往下追溯子树的任一节点非终端节点:树叶以外的节点同代:在同一棵中具有相同层数的节点森林:n个互斥树的集合,移去树根即为森林树的分类原创 2020-11-25 15:50:43 · 541 阅读 · 0 评论