
数据结构和算法
文章平均质量分 59
是一个Bug
我的键盘就是我的钢琴,指尖的优雅胜过世间万千;
展开
-
一个错误案例的多种解读和分析: 图的遍历
【代码】一个错误案例的多种解读和分析。原创 2022-11-04 22:26:57 · 264 阅读 · 0 评论 -
讲讲快速排序的坑
这里如果顺序不对,我们是走不下去的,因为如果先增加,这样的话对于这个数组,这里的 这样的变化是我们不能接受的因为,后面的转换就是为了把mid和刚好小于mid上数的left转换原创 2022-11-03 22:57:53 · 128 阅读 · 0 评论 -
每日打卡:22. 括号生成
【代码】每日打卡:22. 括号生成。原创 2022-11-01 15:38:15 · 82 阅读 · 0 评论 -
我的超时案例分析: 2456. 最流行的视频创作者
【代码】我的超时案例分析: 2456. 最流行的视频创作者。原创 2022-10-31 21:37:00 · 113 阅读 · 0 评论 -
最优惠的组合(奇安信笔试题)
B公司说,每满3件,其中最便宜的一件就白给;A公司说,满3件 就 全部6折;我们可以在两家公司随意挑选;今天是一道很有意思的题,有A,B两家公司都在出售。但是每个品种只能选一件;原创 2022-09-15 21:19:19 · 183 阅读 · 0 评论 -
组合总和 : 回顾下回溯和递归
各自的变量空间, 其实就是 .class 进行解析, 分成了多个方法区,这些值保存到不同的方法区,如果。这样虽然可以,但是造成大量的中间计算, 会超时;如果用 begin 开头, 就会出现下图。这里其实就对应了原来的一个递归问题。那么每个值都已经被改变。原创 2022-09-11 00:15:34 · 205 阅读 · 0 评论 -
有意思的coding分享
给一个最近的例题吧,coding真是人间一大乐事。可以通过两个公式将其分解为 1;原创 2022-09-03 23:16:49 · 168 阅读 · 3 评论 -
尚需努力2022-8-31.0.0
【代码】尚需努力2022-8-31.0.0。原创 2022-08-30 23:59:03 · 108 阅读 · 0 评论 -
最长回文子串--lambda+stream+递归暴力枚举
我这里的就是暴力枚举,然后判定,先留个底子,回头来改。给你一个字符串 s,找到 s 中最长的回文子串。原创 2022-08-20 22:13:46 · 130 阅读 · 0 评论 -
全排列:让我看到未来所有的可能 -> 跨越CV小白的回溯算法
最近很长时间没有刷题,忘了很多,正好遇到一道老朋友 数组全排列;恰好用到了回溯,今天回顾一下;本题 引自:leetcode 46首先,每个数可以用填空来考虑讲到了树,可以说一下递归和回溯回溯就是树的递归;我们在调用的过程中,先填数,如果达到返回条件,选择其它没有选择的数字...原创 2022-08-07 18:07:44 · 188 阅读 · 0 评论 -
十分钟AC一道中等题:两两交换链表(人生一次: 记录一下)
总结 这道题和反转链表很像,直接就是三指针,pre,cur, nex 三个指针进行遍历即可计算时间 超过100%的用户;这里其实也可以用递归去做原创 2022-07-11 21:21:04 · 104 阅读 · 0 评论 -
递归,另一种形式的遍历
这里用自己的语言描述下,递归就是调用自己,在源代码还没有执行完毕时,开辟新的空间来进行计算,不断更新从开始到调用自己之间执行的代码;我们可以总结出来:递归的常用实现:树的遍历,图的查询递归看似麻烦,实际上雀氏不好理解不断调用自己返回,就一定要明确好返回的条件,确定调用时可以正确返回;这个题一看就知道是dfs,dfs最常见实现就是递归;需要注意的是:......原创 2022-06-06 15:46:24 · 207 阅读 · 0 评论 -
递归的运用:删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点感谢宫水三叶,递归和回溯确实是我的弱点,好好学习大佬的经验利用题目本身的函数签名的含义,也就是「在以 root 为根的子树中,删除值为 key 的节点,并返回删除节点后的树的根节点」,我们可以用「递归」来做。起始先对边界情况进行处理,当 root 为空(可能起始传入的 root 为空,也可能是递归过程中没有找到值为 key 的节点时,导致的 root 为空),我们无须进行任何删除,直接返回 null 即可。根据当前 root.val 与 key 的大小关系,进行分情况讨论:原创 2022-06-02 15:48:31 · 273 阅读 · 0 评论 -
恰到好处的四边形:让无数根火柴组合正方形?是回溯:动态规划
非常有意思的一道题,分享一下其实就是有一组数据,你需要从中找到四个分组且每个分组且他们的和相等;给出习题地址 链接: link解法二 回溯解法三 状态压缩 + 动态规划原创 2022-06-01 22:46:54 · 137 阅读 · 0 评论 -
Java实现LRU缓存
这里写目录标题LRU 缓存解法一Bug思路LRU 缓存LRU 缓存机制可以通过哈希表辅以双向链表实现,我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。这样以来,我们首先使用哈希表进行定位,找出缓存项在双向链表中的位置,随后将其移动到双向链表的头部,即可在 O(1)O(1) 的时间内完原创 2022-05-31 10:09:08 · 477 阅读 · 0 评论 -
灵活的链表,多变的链表
这里写目录标题介绍算法题题一 021. 删除链表的倒数第 n 个结点介绍链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需原创 2022-05-28 17:37:16 · 170 阅读 · 0 评论 -
有一种树叫二叉搜索树
二叉搜索树二叉搜索树的定义052. 展平二叉搜索树053. 二叉搜索树中的中序后继054. 所有大于等于节点的值之和二叉搜索树的定义二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速原创 2022-05-28 16:39:35 · 212 阅读 · 0 评论 -
局部变量的处理
今天在做题从上到下打印二叉树 III的时候,突然发现变量被方法处理后无法输出,必须return才可以;先给出问题和代码class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res原创 2022-05-28 13:42:16 · 105 阅读 · 0 评论 -
二分查找的边界限制和选择
选择合适的二分查找二分解析题一 剑指 Offer 11. 旋转数组的最小数字解析二分解析题一 剑指 Offer 11. 旋转数组的最小数字解析// class Solution {// public int minArray(int[] nums) {// if(nums.length==1)return nums[0];// int l=0, r=nums.length-1;// while(l<=r){//原创 2022-05-27 15:55:28 · 169 阅读 · 0 评论 -
贪心算法=>我的眼前,就是整个世界
贪心基础贪心算法,是指在对问题求解时,总是做出再当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是某种意义上的局部最优解。贪心算法没有固定算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。贪心算法的基本思路建立数学模型来描述问题。把求解的问题分成若干个子问题。对每一子问题求解,得到子问题的局部最优解。把子问题的解局部最原创 2022-05-27 15:26:57 · 135 阅读 · 0 评论 -
树:大根堆or小根堆
这里写目录标题介绍题一 059. 数据流的第 K 大数值解析我的遍历介绍题一 059. 数据流的第 K 大数值解析Java 中的 PriorityQueue 就是使用堆实现的。//小根堆,默认容量11PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();//大根堆,容量11PriorityQueue<Integer> maxHeap = new PriorityQueue<原创 2022-05-26 12:24:17 · 178 阅读 · 0 评论 -
Java->>移位运算符-位运算
Java>>>移位运算符一级目录左移运算符:<<习题一解题思路一级目录<< : 左移运算符,num << 1,相当于num乘以2 : 右移运算符,num >> 1,相当于num除以2: 无符号右移,忽略符号位,空位都以0补齐左移运算符:<<左移1位后换算成十进制的值为:1466367340,刚好是733183670的两倍, 有些人在乘2操作时喜欢用左移运算符来替代原创 2022-05-26 10:48:39 · 890 阅读 · 0 评论 -
动态规划->从身前寸步看到无穷远处
剑指offer序言5.16 -> 1题10- I. 斐波那契数列个人思路(suc)个人解法官方解法(滚动数组)5.17 -> 6题10- II. 青蛙跳台阶问题个人思路个人解法(suc)(滑动数组)官方解法63. 股票的最大利润个人思路(遍历)个人解法官方解法个人的dp解法第三题 42. 连续子数组的最大和个人思路个人解法官方解法第四题 47. 礼物的最大价值个人思路个人解法(dp)(suc)官方解法第五题 46. 把数字翻译成字符串个人思路个人解法(HashSet)官方解法第六题 48.原创 2022-05-26 10:07:30 · 291 阅读 · 0 评论 -
求助:需要解决的bug
需要解决的bugBlog介绍习题 53 - I. 在排序数组中查找数字 I解决方案Blog介绍在做题中遇到一些问题,为了更好地处理和分享,作此Blog。习题 53 - I. 在排序数组中查找数字 I当我尝试二分法处理时,发现class Solution { int len=0; public int search(int[] nums, int target) { return binarySearchT(nums, 0, nums.length-原创 2022-05-26 09:42:24 · 177 阅读 · 0 评论 -
二叉树深度->递归返回值找妈妈
今天回顾时,发现个人问题class Solution { int n = 0; public int maxDepth(TreeNode root) { return dfs(root); //结果为5 } public int dfs(TreeNode root){//设计不好返回值 if(root==null) return n; n++; n = dfs(root.left原创 2022-05-25 22:27:55 · 141 阅读 · 0 评论 -
滑动窗口=>在下别名“双指针”
滑动窗口滑动窗口-目标1984. 学生分数的最小差值个人解法官方解法594. 最长和谐子序列个人解法官方解法滑动窗口-目标滑动窗口总结:1984. 学生分数的最小差值个人解法class Solution { public int minimumDifference(int[] nums, int k) { Arrays.sort(nums); // 这里gap = Integer.MAX_VALUE; int gap = 10000000原创 2022-05-25 14:52:39 · 99 阅读 · 0 评论 -
递归->当递归遇上链表,或许就是最好的return
递归->链表2022.5.24习题 06. 从尾到头打印链表递归解法给出一个递归例子024. 反转链表2022.5.24习题 06. 从尾到头打印链表递归解法class Solution { List<Integer> list = new ArrayList<>(); public int[] reversePrint(ListNode head) { ListNode cur = head; dfs(cur);原创 2022-05-24 11:17:02 · 172 阅读 · 0 评论 -
深度优先 VS 广度优先->谁是Tree心仪的CP?
2022-21th的算法题目标5.24 四题题一 965. 单值二叉树个人解法官方解法BFSDFS目标5.24 四题题一 965. 单值二叉树个人解法需要好好研究下树的dfs 和递归的思想class Solution { public boolean isUnivalTree(TreeNode root) { if(root==null)return true; int flag = root.val; return isflag(roo原创 2022-05-24 10:05:34 · 269 阅读 · 0 评论 -
2022-21th-5.23的算法题
2022-21th的算法题目标5.23题一 675. 为高尔夫比赛砍树个人解法官方解法题一个人解法官方解法题一个人解法官方解法5.24题一个人解法官方解法目标5.23题一 675. 为高尔夫比赛砍树个人解法class Solution { public int cutOffTree(List<List<Integer>> forest) {//回溯 dfs 如果能走就一直走,不行就放回上一层假设每次都可以就是贪心 int ste原创 2022-05-23 17:29:14 · 130 阅读 · 0 评论 -
2022-20th-week-剑指offer
剑指offer序言5-13-8题第一题个人思路个人解法官方解法5-13-8题第一题个人思路个人解法官方解法5-14-8题第一题个人思路个人解法官方解法序言剑指offer还剩下7天和60道题,争取做完!5-13-8题第一题个人思路个人解法官方解法5-13-8题第一题个人思路个人解法官方解法5-14-8题第一题个人思路个人解法官方解法...原创 2022-05-16 22:40:08 · 2492 阅读 · 0 评论 -
小张的算法基础
排序算法回顾本Blog的目的排序算法冒泡排序本Blog的目的很久没有回顾基础了,是时候整合一下算法基础了;基本的排序和插入递归和遍历图中dfs和bfs贪心和动态后期会整合一下数据结构排序算法冒泡排序算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字原创 2022-05-03 21:24:21 · 670 阅读 · 0 评论 -
第十九周的算法总结-2022
第十九周的算法总结-20225.1 三题(动态+数据结构)第一题个人总结官方解法推荐解法5.2第一题个人总结官方解法推荐解法5.3第一题个人总结官方解法推荐解法5.4第一题个人总结官方解法推荐解法5.5第一题个人总结官方解法推荐解法5.6第一题个人总结官方解法推荐解法5.7第一题个人总结官方解法推荐解法5.8第一题个人总结官方解法推荐解法5.1 三题(动态+数据结构)第一题个人总结官方解法推荐解法5.2第一题个人总结官方解法推荐解法5.3第一题个人总结官方解法推荐解法5.4原创 2022-05-01 11:21:01 · 981 阅读 · 0 评论 -
4月算法刷题总结
4月算法刷题总结4.22 动态规划三题509. 斐波那契数我的解法(基于ArrayList的解法)推荐解法(基于动态规划的解法)题解引用1137. 第 N 个泰波那契数我的解法(基于动态规划的解法)4.22 动态规划三题509. 斐波那契数斐波那契数(通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。我的解法(基于ArrayList的解法)class Solution { public int fib(int n) {原创 2022-04-22 20:48:49 · 253 阅读 · 1 评论