- 博客(21)
- 收藏
- 关注
原创 SendMessage、PostMessage原理
仔细看完MSDN解释,我们了解到,SendMessage的确是发送消息,然后等待处理完成返回,但发送消息的方法为直接调用消息处理函数(即WndProc函数),按照函数调用规则,肯定会等消息处理函数返回之后,SendMessage才返回。而PostMessage却没有发送消息,PostMessage是将消息放入消息队列中,然后立刻返回,至于消息何时被处理,PostMessage完全不知道,此时只有消息循环知道被PostMessage的消息何时被处理了。具体细节,下面第2点将会讲到。我们先来看最简单的。
2024-08-26 15:28:53
142
原创 JUCE的UI详解(Slider篇)
JUCE的Slider是一个用于更改值的滑块控件。滑块可以是水平的、垂直的或旋转的,并且可以选择显示文本框来表示当前值。
2022-12-27 10:43:34
289
1
原创 剑指Offer:判断是不是平衡二叉树
描述输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。数据范围:n \le 100n≤100,树上节点的val值满足 0 \le n \le 10000≤n≤1000要求:空间复杂度O(1)
2022-03-16 14:17:20
140
原创 剑指Offer:树的子结构
描述输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构数据范围:0 <= A的节点个数 <= 100000 <= B的节点个数 <= 10000我的思路是一开始乱写,不通过再讨论。public boolean HasSubtree(TreeNode root1,TreeNode root2) { i
2022-03-16 11:20:33
403
原创 剑指Offer:二叉树中和为某一值的路径(二)
描述输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n如二叉树root为{10,5,12,4,7},expectNumber为22则合法路径有[[10,5,7],[10,12]]数据范围:树中节点总数在范围 [0, 5000] 内-1000 <
2022-03-15 15:09:24
118
原创 剑指Offer:二叉树中和为某一值的路径(一)
描述给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如:给出如下的二叉树, sum=22返回true,因为存在一条路径 5-> 4-> 11->→2的节点值之和为 22我的思路感觉很简单,就先乱写一下,应该会出错,出错了再改int sum;
2022-03-15 14:03:43
204
原创 剑指Offer:重建二叉树
描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length == pre.length2.pre 和 vin 均无重复元素3.vin出现的元素均出现在 pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比数据范围:n \le 2000n≤2000,节点的值 -10000 \le val \le 10
2022-03-15 12:08:07
711
原创 剑指Offer:从上到下打印二叉树
描述不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。数据范围:0<=节点总数<=1000-1000<=节点值<=1000我的思路一开始觉得挺简单,结果代码刚敲完就进入死循环。public ArrayList<Integer> PrintFromTopToBottom(TreeNode
2022-03-14 14:04:39
117
2
原创 剑指Offer:二叉搜索树的第k个节点
描述给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。1.返回第k小的节点值即可2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-13.保证n个节点的值不一样数据范围: 0 \le n \le10000≤n≤1000,0 \le k \le10000≤k≤1000,树上每个结点的值满足0 \le val \le 10000≤val≤1000进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)如输入{5,3,7,2,4,6,8},3
2022-03-14 13:14:29
238
3
原创 剑指Offer:二叉树的镜像
描述操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)比如:源二叉树...
2022-03-14 10:09:54
131
2
原创 剑指Offer:按之字形顺序打印二叉树
搞了这么久终于到了一道中等题。描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| <= 1500∣val∣<=1500要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]我的思路其实没啥思路,就是有点
2022-03-13 13:49:46
981
原创 剑指Offer: 二叉树的深度
描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。数据范围:节点的数量满足 0 \le n \le 1000≤n≤100 ,节点上的值满足 0 \le val \le 1000≤val≤100进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图:我的思路一般求解二叉树的问题,很多都是用到了递归,这道题也是需要用到递归
2022-03-13 11:07:41
108
原创 剑指Offer:删除链表的节点
描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000我的思路我想着直接遍历链表然后遇到要删除的值就cur = cur.next就好。但是还是错了public ListNode
2022-03-13 10:13:28
1203
3
原创 剑指Offer:链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。我的思路这个题也很简单,也是一个双指针的
2022-03-12 14:54:15
277
原创 剑指Offer:链表中环的入口结点
描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这
2022-03-12 13:48:02
640
原创 剑指Offer:两个链表的第一个公共结点
描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n \le 1000n≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二
2022-03-12 11:22:23
68
原创 剑指Offer:合并两个排序的链表
描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1
2022-03-12 10:41:41
672
原创 剑指Offer:反转链表
描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0\leq n\leq10000≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:我的思路这道题我调试了好几次都是错的,其实还是因为链表指向的问题,对链表的赋值和传递都不是很熟悉,连错了很多次。这里
2022-03-11 15:21:56
131
1
原创 剑指Offer:从尾到头打印链表
描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000我的思路其实这道题很简单,就是要注意一点,有另一道题目叫做反转链表,这道题和它的区别在于一个是只需要返回节点的值,把值赋在数组上并且返回的,但是如果是反转链表的话,就需要修改指针的指向,这两个虽然形式很像但是其实内容还是有很大的差别的。所以这道题可以很轻松的拿下!直接利用递归遍历到链表的最后一位,再一层一层
2022-03-11 13:47:29
70
原创 剑指Offer 09.用两个栈实现队列
描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。数据范围: n\le1000n≤1000要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)我的思路这道题也是一道简单题,思路也很容易想到,并且只用完成push和pop的操作。但是在实现的时候要注意细节,我感觉算法题都是题目写多了思路不会少,经常有思路但
2022-03-11 13:19:14
161
原创 剑指Offer 30.包含min函数的栈
描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素数据范围:操作数量满足 0 \le n \le 300 \0≤n≤300 ,输入的元素满足 |val| \le 10000 \∣val∣≤10000进阶:栈的各个操作的时间复杂度是 O(1)\O(1)
2022-03-11 11:54:15
284
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人