Leetcode刷题
文章平均质量分 52
以简单易懂的方式分享学习笔记
从头再来yyds
用学的心态去教,把每次自己的收获写到上面,分享给更多的人,如果能够有一种力量推动着我前进,那就是你们的指点和鼓励。
展开
-
牛客网:数据流中的中位数
这道题看半天很懵,不知道在讲什么,后来通过示例发现,原来所谓数据流是插入和返回中位数是结合的产物。import java.util.*;public class Solution { ArrayList<Integer> list = new ArrayList<>(); public void Insert(Integer num) { list.add(num); } public Double GetMedia.原创 2022-04-28 16:56:11 · 111 阅读 · 0 评论 -
大顶堆和小顶堆
一、什么是堆?堆是一种非线性结构,可以把堆看作一棵二叉树,也可以看作一个数组,即:堆就是利用完全二叉树的结构来维护的一维数组。堆可以分为大顶堆和小顶堆。大顶堆:每个结点的值都大于或等于其左右孩子结点的值。小顶堆:每个结点的值都小于或等于其左右孩子结点的值。如果是排序,求升序用大顶堆,求降序用小顶堆。一般我们说 topK 问题,就可以用大顶堆或小顶堆来实现,最大的 K 个:小顶堆最小的 K 个:大顶堆这里是引用二、PriorityQueue常用的方法:大根堆的构造 Priori原创 2022-04-28 16:50:24 · 4765 阅读 · 2 评论 -
链表中环的入口结点
public ListNode EntryNodeOfLoop(ListNode pHead) { if(pHead==null) return null; ListNode slow = pHead,fast = pHead; while(fast!=null&&fast.next!=null){ fast = fast.next.next; slow = slow.next; ..原创 2022-04-20 14:41:28 · 304 阅读 · 0 评论 -
单链表的反转和单链表区间反转
假设链表为1→2→3→∅,我们想要把它改成∅←1←2←3。在遍历链表时,将当前节点的指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。public ListNode ReverseList(ListNode head) { // 申请一个链表头 使用头插法 ListNode pre = null,next= null,cur = head; while(cur.原创 2022-04-19 20:55:11 · 209 阅读 · 0 评论 -
快慢指针技巧
在处理数组和链表相关问题时,双指针技巧是经常用到的,双指针技巧主要分为两类:左右指针和快慢指针。所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。对于单链表来说,大部分技巧都属于快慢指针,前文 单链表的六大解题套路 都涵盖了,比如链表环判断,倒数第 K 个链表节点等问题,它们都是通过一个 fast 快指针和一个 slow 慢指针配合完成任务。在数组中并没有真正意义上的指针,但我们可以把索引当做数组中的指针,这样也可以在数组中施展双指针技巧,本文主要讲数组相原创 2022-04-17 17:47:53 · 280 阅读 · 0 评论 -
区间覆盖问题
思考:题目问我们,去除被覆盖区间之后,还剩下多少区间,那么我们可以先算一算,被覆盖区间有多少个,然后和总数相减就是剩余区间数。对于这种区间问题,如果没啥头绪,首先排个序看看,比如我们按照区间的起点进行升序排序。先对区间中的首元素升序排序,再按照首元素相同时,区间尾元素降序排序,我们需要保证长的那个区间在上面(按照终点降序),这样才会被判定为覆盖,否则会被错误地判定为相交,少算一个覆盖区间。最后分别有三种情况的区间放置形式,当为覆盖区间时,res++。class Solution { p.原创 2022-04-16 17:04:49 · 1661 阅读 · 0 评论 -
leetcod241.为运算表达式设计优先级
刚做这道题时蒙了,不知道从哪里下手,后来发现,这道题其实就是在穷举所有可能的加括号的方式,并计算出对应的结果。那么,是否需要穷举出所有可能的加括号的方式,是不是还要考虑括号的合法性?还要考虑计算的优先级呢?这些当然要考虑,但利用分治思想和递归函数,算法就会帮助我们考虑一切细节。废话不多说,解决本题的关键有两点:1、不要思考整体,而是把目光聚焦局部,只看一个运算符。2、明确递归函数的定义是什么,相信并且利用好函数的定义。我们先举个例子,比如我给你输入这样一个算式:1 + 2 * 3 - 4 * 5.原创 2022-04-16 15:45:47 · 202 阅读 · 0 评论 -
leetcode752:打开转盘锁
回溯算法经典题型原创 2022-04-12 12:08:03 · 103 阅读 · 0 评论 -
回溯算法:全排列
本文解决几个问题:回溯算法是什么?解决回溯算法相关的问题有什么技巧?如何学习回溯算法?回溯算法代码是否有规律可循?其实回溯算法其实就是我们常说的 DFS 算法,本质上就是一种暴力穷举算法。废话不多说,直接上回溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。站在回溯树的一个节点上,你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。如果你不理解这三个词语的解释,没关系,我们后面会转载 2022-04-10 17:34:32 · 2321 阅读 · 0 评论 -
动态规划凑零钱问题
动态规划特点:重复子问题状态转移方程(最关键)最优子结构题型:求最值核心: 穷举解题套路:明确状态明确选择明确dp函数/数组的定义明确base case# 暴力求解(超时,通过不了)class Solution { // 状态:目标金额 amount // 选择:coins 数组中列出所有硬币面额 // 函数的定义:凑出总金额amount,至少需要coinChange(coins,amount)枚硬币 // base case: amount原创 2022-04-07 15:45:11 · 374 阅读 · 0 评论 -
Fibonaci数列,求f(n)?
Fibonaci数列,求f(n)原创 2022-04-07 15:02:03 · 257 阅读 · 1 评论 -
leetcode21&&23
LeetCode21:合并双个有序链表public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode dummy = new ListNode(-1),p = dummy; ListNode p1 = list1,p2 = list2; if(p1==null&&p2==null) { return dump.next; }原创 2022-04-05 21:22:59 · 757 阅读 · 0 评论