
LeetCode
文章平均质量分 58
Yonggie
只写优质原创,坚决绝拒绝抄袭 | 研究员 | 广州大学 | 香港中文大学深圳FNii | pytorch_geometric(PyG)、FATE contributor
展开
-
【小白友好】LeetCode 删除并获得点数
打家劫舍https://leetcode.cn/problems/house-robber/原创 2024-03-04 14:40:03 · 363 阅读 · 0 评论 -
【小白友好】LeetCode 打家劫舍 III
小白友好!动态规划是不刷题,自己100%想不出来的。23。原创 2024-03-03 17:31:18 · 1039 阅读 · 0 评论 -
【小白不友好】删除有序数组中的重复项 II
slow的位置是fast元素将要落下的位置,不是已经处理好的最后一个数的位置:slow的位置上的元素是没处理的、不符合条件的。不需要了,因为在slow-2==fast的时候,判断过是否已经有2次了。如果fast==slow元素,那么要判断是否fast的次数到达2次了,到了丢掉,不到进入;,相同的都会相邻,fast都等于slow-2了,那肯定2个指针之间的所有元素都相同。题外话,此时slow位置到fast位置肯定全部都是a,因为是。,可以看到-2位置上要么和-1位置上相同,要么不同。次fast要落下的位置。原创 2024-02-23 11:17:01 · 317 阅读 · 0 评论 -
【小白友好】leetcode 移动零
根据小白解法,我们让快指针去指向判定当前元素是否能进入左侧要保留部分的位置,慢指针指向保留部分的最后一个位置。也就是快指针做条件判断,慢指针做位置标识。思想上还是首先开一个指针i,i从左到右扫每一个元素,i每发现一个0,就把这个0推到最后,这样i到最后就可以了。=val,就可以把fast元素放到左侧了。一般使用起来都是O(n),结束条件几乎都是快指针遍历结束,慢指针恰好在边界。脑中脑中迅速闪过几个关键词:数组、数组划分部分、双指针 ======> 考虑快慢指针。的小白思想和一模一样,只不过把。原创 2024-02-23 09:24:05 · 419 阅读 · 0 评论 -
LeetCode remove-element
其实在数组和链表等题目,尤其是要in place分段的,基本上都是快慢指针的天下,这里是快指针做条件判断,慢指针做位置标识。这种方法如果不做题,是不可能自己想到的,只有多练习才行。原创 2024-02-23 09:08:20 · 742 阅读 · 0 评论 -
【小白友好】python leetcode 27 remove element
上述基本上能过了,但是还有特殊情况要考虑,比如空值、0等等情况。然后把想出来的都列一下看看情况。nums=[]不可能,val值都没有。,此时return的值应当是0,也还没问题。提交下,过了,用时击败82%。其实都是双指针的思路,只不过一开始naive的双指针写起来比较啰嗦,而改进后的双指针写起来简洁。原创 2024-02-22 13:25:37 · 499 阅读 · 0 评论 -
【普通人题解】LeetCode 130. 被围绕的区域
边缘的不被染色。那我先把边缘的找出来,搞成别的字母比如A,然后再把剩下的O变成X,然后再把A的变回O就可以了。思路比较清晰,就是代码会比较繁琐一点。原创 2022-08-16 00:15:43 · 175 阅读 · 0 评论 -
【普通人解题】LeetCode 695. 岛屿的最大面积
dfs原创 2022-08-15 23:47:48 · 164 阅读 · 0 评论 -
【普通人解题】 LeetCode 200. 岛屿数量
直接dfs/bfs搜索,每搜索完一个块 count就加一,与这个一样,建议可以一起看。原创 2022-08-15 21:18:00 · 110 阅读 · 0 评论 -
【普通人题解】LeetCode 637. 二叉树的层平均值
代码】【普通人题解】LeetCode 637. 二叉树的层平均值。原创 2022-08-15 19:50:43 · 1273 阅读 · 0 评论 -
【普通人题解】LeetCode 三数之和
但是显然会超时。不过在刷题的时候可以先试试,反正30秒就写完。原创 2022-08-15 17:36:59 · 138 阅读 · 0 评论 -
【普通人题解】二维数组的二分查找
输入数据i_max,j_max,表示我数组的行列数;下一行输入要查找的数字target;下面i_max行输入二维数组。要求用二分查找看数组中是否有target。原创 2022-08-15 17:25:05 · 220 阅读 · 0 评论 -
【普通人题解】给定邻接矩阵,求连通分量
给定一个图的邻接矩阵,求出邻接矩阵的连通分量有多少个。原创 2022-08-15 17:22:58 · 1255 阅读 · 0 评论 -
【普通人题解】LeetCode174. 地下城游戏
建议先看,再看这个题。原创 2022-08-14 15:54:40 · 659 阅读 · 0 评论 -
【普通人解题】LeetCode 64. 最小路径和
建议先看,再看,然后再看此题。题目要求最小路径和,也就是到达右下角那个点的时候取最小值就可以。思路1:寻找到所有能够达到右下角的路径,并且记录路径和,取最小的。思路2:动态规划(能用暴力搜索的一般都可以用动态规划,动态规划一般会比搜索效率高)。...原创 2022-08-14 13:28:44 · 269 阅读 · 0 评论 -
【普通人题解】LeetCode 纸牌游戏
给定纸牌堆,小明每次抽两张牌顺序压到牌堆最下面,此时翻看牌堆最上面的牌,并拿出牌堆。重复此操作,小明能得到n个牌的数字。假设已知小明看到的牌的顺序,求纸牌堆的原顺序。输入:n,和n个数字,代表小明看到的牌顺序。输出:纸牌原顺序。示例:41 2 3 4输出4 2 1 3。......原创 2022-08-14 12:50:57 · 902 阅读 · 0 评论 -
【普通人解题】LeetCode 63. 不同路径 II
建议先去看那个题,理解下。原创 2022-08-13 15:26:00 · 205 阅读 · 0 评论 -
【普通人解题】leetcode 62. 不同路径
只能右下,那么往右一共是m-1,往下一共走n-1次,一共会走m-1+n-1次。可以理解为要走m+n-1次,要选择m-1次右(或者n-1次下),也就是Cm+n−2n−1。原创 2022-08-13 14:23:11 · 231 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径java
最初的最初一开始打算这样写的。但是呢,人家题目的要求是,必须到达叶子节点的一个路径。这个的思路是,最后到叶子下面的null时候再去做判断这个路径是否是符合要求的。里面有很多傻逼代码,轻喷。 // 这样写code会被写进去两次,因为叶子节点下面左右两个还会有指针,而path并没有变化。除非你拿map记录是否重复,才能有正确答案。 // 而且如果path这个变量写在函数里面(作为参数传递),其实是和path放在外面的效果是一样的,因为所有变量都是引用。class Solution { pub原创 2021-04-20 13:50:29 · 156 阅读 · 0 评论 -
leetcode 77组合 菜鸟一步步修改
思路这种找数的,找个又不固定,显然是要递归搜索的。怎么搜呢?好理解naive的方法:先生成n个是否已经访问过的标志位vis,然后递归每一层for就行了,这样就能找到k个数进行组合,后放入答案里面。当然这还没完,会出现这样的情况,第一次找到了[2,3],第二次找到了[3,2],这样还得去一次重。怎么去重呢?我是又用了一个标志位already_in,先把找到的数做一次排序,再进行标志是否以访问过。这听上去就贼鸡儿蠢的方案果然就超时了。超时版本class Solution {public:原创 2021-04-07 18:44:27 · 166 阅读 · 0 评论 -
leetcode 31. 下一个排列
丑陋的版本啊!!class Solution {public: bool checkMax(vector<int> tmp){ vector<int> before(tmp); sort(tmp.rbegin(), tmp.rend()); return tmp==before; } bool finised=false; void getRes(vector<int>& nums原创 2021-04-06 12:15:27 · 101 阅读 · 0 评论 -
自用 leetcode 41 全排列
前言太久没刷leetcode了。竟然有些忘记。看了题解才记起来这个一定要用dfs,思想是用给定的数填空,一步步填上即可,每步是dfs的一层就是了。naive:map记录是否用掉那个数暴力dfs:class Solution {public: map<int,bool> is_used; void fillblank(vector<vector<int>>& res,vector<int> nums,vector<int原创 2021-04-04 12:19:01 · 205 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串
勉强能过的实现我的思路是这样的,就从头开始扫起,维护一个temp当前无重复子串,每更新一次temp串,就和全局的res(res是最后的返回结果)做一次比较,res取两者最大值。代码我自己写了个find-char工具类,就查找string里面第一个字符的位置用的。其实我这个实现确实是勉强能过而已,思路也很直白,复杂度都有O(n2)O(n^2)O(n2)了。class Solution {p...原创 2020-04-18 16:57:20 · 191 阅读 · 0 评论 -
leetcode 86. Partition List
我的方法很简单,把原始list从头挨着扫到尾,建立两个新的链表,一个是小于x的list,一个是大于等于x的list。扫完之后把两个list合起来返回就行。效率不高,空间不省,但是简单易懂。本地cpp测试:#include <iostream>#include <cstdio>#include <vector>using namespace s...原创 2019-03-02 11:03:18 · 115 阅读 · 0 评论 -
leetcode 206. Reverse Linked List
算是链表的基本操作的复习。本地cpp:#include <iostream>#include <cstdio>#include <vector>using namespace std;struct p{ int v; p *next;};//前插入法 p* create(vector<int> elem){ int n...原创 2019-03-02 09:59:54 · 204 阅读 · 0 评论 -
leetcode 680(Python 3)
题目是,给定一个字符,两种情况返回true1.本身就是回文串(palindrome)2.删除任意一个字符后,这个串成为回文串。 1.朴素方法:轮着删字符,time limit exceededclass Solution: def validPalindrome(self, s): """ :type s: str ...原创 2018-12-10 13:52:50 · 453 阅读 · 0 评论 -
leetcode 66. Plus One
这道题整体来说没有难度……不解析了直接上代码。C++版:Dev中的:#include <iostream> #include <cstring>#include <vector>#include <cstdio>using namespace std;int tem[]={9,9,9,9};vector<int>...原创 2018-10-26 16:40:27 · 211 阅读 · 0 评论 -
92. Reverse Linked List II
这个做了两小时差不多……我真的好弱啊……半小时写出来大体算法,剩下的时间都在debug ==一开始我觉得用一个栈比较好。。我又瞅见那里有个“one-pass”。扫一遍?嗯……那我就扫一遍吧……于是就出了这个……由于我主要算法是从start的前面的节点开始的,所以我的链表节点数至少要3个,所以none和1个都不处理直接返回。其他的由于我的算法,所以我给每个链表前面都加了一个节点。...原创 2019-03-13 16:43:20 · 115 阅读 · 0 评论 -
合并两个有序链表(LeetCode 21. Merge Two Sorted Lists)
其实这都是老生常谈的问题了假设是从小到大排列,方法我们都知道,从l1的头部和l2的头部开始,谁小就先在前面简单的说,1->4->6和2->3->7的话,那么合并起来就是1->2->3->4->6->7。那么一个非常简单的方法是,我新建一个链表就是了,用尾插法,哪个节点小谁就先从后插入,有些浪费空间O(n)。主要就是这么个意思,可...原创 2019-04-04 15:36:43 · 215 阅读 · 0 评论 -
链表上的归并排序(LeetCode 148. Sort List)
归并排序定义不说了,时间复杂度O(nlogn)。可以看看麻省理工公开课的《算法导论》,那个教授把每个算法都讲得非常清楚。麻省理工《算法导论》之前写过数组的,现在转到链表中,给自己练练手吧。代码稍微有些长,但是和数组的方法和思想是一样的。也是递归思想,用了merge和sort。有一点tricky的地方就是先sort后半部分,再sort前半部分,否则砍断链表的同时也丢失了...原创 2019-04-04 16:43:30 · 329 阅读 · 0 评论 -
关于树的遍历的边界(LeetCode 112. Path Sum)
写给自己:印象中树的停止节点是node,它的返回条件是root==NULL,那么在这道问题里,它就不好做。那么我们不用root==NULL来做边界,我们可以用root->left==NULL&&root->right==NULL来做边界,这样可以到达叶子节点就返回,不用到达叶子的下一个指针(也就是NULL)再返回。bool hasPathSum(TreeN...原创 2019-04-04 23:34:47 · 318 阅读 · 0 评论 -
向搜索二叉树插入新节点的操作
什么是搜索树,不说了,《数据结构》,比较基础,可以百度等。可以直接用的,可以参考下,我代码风格可能稍微有些繁琐。默认树节点的结构是一个val,一个left指针,一个right指针。TreeNode* insertIntoBST(TreeNode* root, int val) { if(root==NULL){ root=new TreeNo...原创 2019-04-05 00:42:43 · 672 阅读 · 0 评论 -
141. Linked List Cycle 判断链表是否有环||判断链表环出现的节点
第一种是比较聪明的方法,高赞方法一个快指针runner,一个慢指针walker,快指针一次走两步,慢指针一次走一步。(另:这种方法可以找到链表的中间节点),如果说链表有环,那么最终runner和walker会相等。bool hasCycle(ListNode *head) { if(head==NULL||head->next==NULL) return ...原创 2019-04-02 22:02:09 · 196 阅读 · 0 评论 -
leetcode 83. Remove Duplicates from Sorted List
整体来说不太简洁哈,大家多多包涵。C++版:1.自己Dev上的代码:#include <iostream> #include <cstring>#include <cstdio>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x) :...原创 2018-10-26 14:49:41 · 233 阅读 · 0 评论