- 博客(8)
- 收藏
- 关注
原创 leetcode拓扑排序思路与模板
简介: 拓扑排序问题中我们经常需要判断一个有向无环图是否有环或者能否按顺序走完等。如果一个节点被指向的次数是0, 那么这个节点就是起始节点。存储入度(节点被指向次数),可以用Map或者数组来存放。下一个节点次数减1并判断是否为0, 为0则放入队列。我们判断入度,通俗解释就是当前节点被指向的次数,所有起始节点放入队列,循环遍历下一个或者多个节点。初始化图:用数组作为输入表示方向。最后判断是否有节点没有走到。
2024-05-12 22:04:56
185
1
原创 leetcode中常用的简单数据结构(JAVA)
比如遍历时候当前为字母为'a'我们可以: map.put(map.getOrDefault('a', 0) + 1);// 查看栈是否为空,或者用stack.size() == 0。// 查看栈是否为空,或者用queue.size() == 0。(1) 定义 Map map = new HashMap();(1) 定义 Queue queue = new LinkedList();// 查看栈是否为空,或者用pq.size() == 0。
2024-05-10 14:01:59
1162
原创 单调栈理解与运用
(举例,输入为 7,6,5,4,3,2,1。4. 例子: 1, 5, 8, 3, 2 找到每一个数字右侧第一个比当前大的数字,没有输出-1,输出一个数组。[1] 放入 5, 但1比5小我们人为pop出1, 现在为 [5] // 此时第一个比1大的就是5。[1] 放入 5, 但1比5小我们人为pop, 现在为 [5]同理 8比5 大,现在为[8] // 此时第一个比5大的就是8。2. 举例: 数字: 1, 5, 8, 3, 2 依次入栈。我们的答案就是[5, 8, -1, -1, -1]
2024-05-10 13:03:01
301
原创 Leetcode 670 贪心法解释
题目最大交换,给定一个非负整数,你至多可以交换一次数字中的任意两位。因为总共10个数字,我们可以存每个数字最后的位置,然后可以从9开始比较,直到1为止。从左往右遍历,当前数字与9开始比较位置,然后与8进行比较位置,以此类推。从左到右循环,并从9开始找,如果9比当前数字大则与最右边的9进行交换。step 4: 从第二位3开始找,同理, 9和8都找不到位置。step 1: 从7开始找,与9比较,位置为0找不到。step 2: 从7开始找,与8比较,位置为0找不到。step 3: 从7开始找,与7相同跳过。
2024-05-10 00:36:07
373
原创 滚动哈希的简单解释
3. 问题: 如果我们用十进制,那么很多字符串的哈希值会相同,我们最好用质数(比如31,37)代替10,并且防止过大数值要进行取模。1. 什么时候用和复杂度: 滚动哈希通常用于字符串查找等题目中,复杂度通常为O(N+M)也就是O(N)。2. 解释: 我们可以类比平时的数字,12367这个数字,等于1*10^4+2*10^3+3*10^2+6*10+7。同理如果abcfg(12367)我们可以将其的哈希值定义为12367。23乘以10+6等于236, 其中23省下了运算步骤。4. 滚动:我们用10举例。
2024-05-09 19:09:33
833
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人