可爱宝宝做leetcode
文章平均质量分 73
这个专栏记载了本可爱宝宝做leetcode题的经历
可爱抱抱呀
没啥说的还没说呢
展开
-
可爱宝宝力扣刷题集目录
阿勒八叉原创 2020-06-05 19:05:53 · 764 阅读 · 2 评论 -
校招笔试真题计划汇总(力扣入口)
2021 届秋季校招笔试真题(力扣入口):meituan-001. 小美的用户名meituan-002. 小美的仓库整理meituan-003. 小美的跑腿代购meituan-004. 小团的复制粘贴meituan-005. 小美的区域会议meituan-006. 小团的神秘暗号meituan-007. 小团的选调计划meituan-008. 小团无路可逃meituan-009. 小团的装饰物meituan-010. 小团的默契游戏meituan-011. 搭配出售meituan-0原创 2022-02-17 18:00:02 · 7006 阅读 · 0 评论 -
历次周赛、专场竞赛、春秋赛题目场次及对应具体题目题号+链接汇总
Warm Up Contest:386.字典序排数387.字符串中的第一个唯一字符388.文件的最长绝对路径Weekly Contest 2:389. 找不同390. 消除游戏391. 完美矩形Weekly Contest 3:392. 判断子序列393. UTF-8 编码验证394. 字符串解码395. 至少有 K 个重复字符的最长子串Weekly Contest 4:396. 旋转函数397. 整数替换398. 随机数索引399. 除法求值Weekly Contest原创 2022-01-12 18:58:43 · 4537 阅读 · 1 评论 -
leetcode 20.有效的括号
原题20.有效的括号2020年8月14日 每日一题题解此题思路比较简单,就是最内层的括号一定是连续的两个左右字符,也就是:(),{},或者[],因此我们逐层把最内的括号移除后再看是否把字符移完即可。方法一 移除法很直接,就是凡是字符串中存在(),{},或者[]的时候,就直接替换成空,直到不存在地时候看字符串长度是否为零即可。本思路java代码示例:/*@v7fgg执行用时:53 ms, 在所有 Java 提交中击败了5.48%的用户内存消耗:40.1 MB, 在所有 Java 提交原创 2020-08-14 18:20:11 · 151 阅读 · 0 评论 -
leetcode 43.字符串相乘
原题43.字符串相乘2020年8月13日 每日一题题解题目说,给定的数字位数最高可达109,这就已经远超出了int甚至long的范围限制,因此需要另寻他法。方法一/*@v7fgg执行用时:27 ms, 在所有 Java 提交中击败了16.95%的用户内存消耗:40.5 MB, 在所有 Java 提交中击败了5.58%的用户2020年8月13日 8:19*/class Solution { public String multiply(String num1, String原创 2020-08-13 15:03:02 · 141 阅读 · 0 评论 -
leetcode 475.供暖器
原题475.供暖器题解本题需要注意的是,所给的houses和heaters数组,可能不是排过序的,因此如果算法高度依赖数组的顺序,应该在处理之前先对其进行排序;另外heater的位置并不一定是由house的地方,这一点需要注意。方法一 暴力搜索暴力搜索首先就是在循环遍历每个house的时候,要做好循环遍历一次hearters的准备。对于每一个house,逐个判断每个heater与house的距离的大小,直到找到后一个比前一个的距离大为止(理论上说,heaters距离house,的距离应该是先减后原创 2020-08-12 20:02:04 · 235 阅读 · 3 评论 -
leetcode 133.克隆图
原题133.克隆图连通 深拷贝 简单图题解方法一/*// Definition for a Node.class Node { public int val; public List<Node> neighbors; public Node() { val = 0; neighbors = new ArrayList<Node>(); } public Node(int _原创 2020-08-12 10:59:39 · 185 阅读 · 0 评论 -
leetcode 130.被围绕的区域
原题130.被围绕的区域2020年8月11日 每日一题题解矩阵中无非两种字母X或者O。而O分两种,一种是边界上的以及通过O可以连接到边界的,另一种则是无法通过自己或者其他的O连接到边界的O的,我们需要改变的是后一种O,也就是说,可以由每一个边界上的O向四周扩展到所有的外围O,剩下的O改成X。那么为了标记边界的O,我们每每触及到一个边界O,可把它换为另一个符号,比如临时把O改成A,如此处理完后,再把得到的矩阵,按照A->O以及O->X的方法变换即可。以下的方法一和方法二将会说明实现这个原创 2020-08-11 17:27:06 · 180 阅读 · 0 评论 -
leetcode 696.计数二进制子串
原题696.计数二进制子串2020年8月10日 每日一题题解方法一/*找到0,1交界处开始向两边扩展 *作者@v7fgg *执行用时 :19 ms, 在所有 Java 提交中击败了23.04%的用户 *内存消耗 :39.8 MB, 在所有 Java 提交中击败了9.09%的用户 *2020年5月27日 10:15 */class Solution { public int countBinarySubstrings(String s) { int ans=0;原创 2020-08-10 07:31:32 · 146 阅读 · 0 评论 -
leetcode 336.回文对
原题336.回文对2020年8月6日 每日一题题解方法一 暴力法本方法就是穷举所有前后拼接对儿,判断所得是否为回文串。先贴出奇葩的超时代码://134 / 134 个通过测试用例 状态:超出时间限制//明明示例全都过了,却显示超时,这是什么意思?class Solution { public List<List<Integer>> palindromePairs(String[] words) { List<List<Inte原创 2020-08-06 14:10:40 · 429 阅读 · 0 评论 -
leetcode 337.打家劫舍 III
原题337.打家劫舍 III2020年8月5日 每日一题题解方法一 暴力递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } *//*@v7fgg执行用时:939 ms, 在所有 Java 提交中击原创 2020-08-05 15:04:27 · 143 阅读 · 0 评论 -
leetcode 207.课程表
原题207.课程表2020年8月4日 每日一题图的表示法题解方法一/*@v7fgg 执行用时:6 ms, 在所有 Java 提交中击败了72.49%的用户内存消耗:40.2 MB, 在所有 Java 提交中击败了77.56%的用户2020年8月4日 11:19*/class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { int tiaojian[]=原创 2020-08-04 13:02:46 · 147 阅读 · 0 评论 -
leetcode 415.字符串相加
原题415.字符串相加2020年8月3日 每日一题题解方法一 模拟竖式运算主要思想就是将两个字符串,从末尾开始相加并考虑进位,把得到数字加到表示答案的字符串前面并更新进位。本方法java代码示例:/*模拟数学竖式运算 *作者@v7fgg *执行用时 :19 ms, 在所有 Java 提交中击败了5.21%的用户 *内存消耗 :40.6 MB, 在所有 Java 提交中击败了8.33%的用户 *2020年5月24日 15:10 */class Solution { publ原创 2020-08-03 08:58:28 · 344 阅读 · 0 评论 -
leetcode 131.分割回文串
原题131.分割回文串题解方法一 暴力回溯用一个移动的指针来作为每一个回溯周期的起始点,直到指针跳到字符串之外结束。终止条件是遇到子串不是回文。本思路java代码示例:/*@v7fgg执行用时:4 ms, 在所有 Java 提交中击败了49.07%的用户内存消耗:40.4 MB, 在所有 Java 提交中击败了89.60%的用户2020年8月1日 11:39*/class Solution { List<List<String>> ans=new A原创 2020-08-01 16:48:03 · 117 阅读 · 0 评论 -
leetcode 面试题 08.03.魔术索引
原题面试题 08.03.魔术索引2020年7月31日 每日一题/*@v7fgg执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:40.4 MB, 在所有 Java 提交中击败了93.94%的用户2020年7月31日 7:37*/class Solution { public int findMagicIndex(int[] nums) { for(int i=0;i<nums.length;i++){原创 2020-08-01 07:17:36 · 114 阅读 · 0 评论 -
leetcode 100.相同的树
原题100.相同的树题解方法一 递归方法很简单。对于两个数,判断两个根节点为空或者值相同则继续(否则返回false),之后再以同样的方式判断两个树的左分叉和右分叉是否分别“相同”。这个方法的终止条件是要么遇到值不同的节点(false),要么遇到了最末端的同时为空(true)。本思路java代码示例:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNod原创 2020-07-30 16:11:39 · 139 阅读 · 0 评论 -
leetcode 91.解码方法
原题91.解码方法题解方法一 dp我们在考虑字符串s从头到尾能代表多少种字母解码方式的时候,实际上是根据前多少位有多少种解码方式来计算的。建立一个动态规划的数组ans,下标为i的那个表示的是,从头到s中的下表为i的那位一共能组成多少种解码。首先开头不能是0,这样的话不管一位一码还是两位一码都匹配不到字母,这时需要直接返回0;另外s长度为0也需要返回0;在考虑其他情况下的ans[i]的时候,需要先看一下i-1位置,两位置能不能组成10到26的数字本方法java代码示例:/*@v7fgg执行原创 2020-07-29 12:08:25 · 182 阅读 · 0 评论 -
leetcode 剑指offer 54.二叉搜索树的第k大节点
原题剑指offer 54.二叉搜索树的第k大节点题解关于二叉搜索树方法一按照右根左的方式进行搜索,并把值放入栈,直到栈的大小为k,终止,取顶值。本思路java代码示例:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;原创 2020-07-28 09:11:14 · 188 阅读 · 0 评论 -
leetcode 面试题 08.06.汉诺塔
原题面试题 08.06.汉诺塔题解方法一我们先从一个盘子开始考虑。一个盘子的时候好想,就是直接把那一个从A挪到C就完事儿了。考虑两个盘子的时候。先把顶上的从A移到B,再把A第二个盘子挪到C,最后再把B上的盘子挪到C。考虑三个盘子的时候。先把1从A挪到C,把2从A挪到B,把1从C挪到B,把3从A挪到C,把1从B挪到A,把2从B挪到C,把1从A挪到C。而回头再次考虑三个盘子的情况,发现,我们是先把1和2在保证上小下大的情况下,从A挪(借助C作为临时中转站)到B,再把3挪到C,最后再把1和2以同样原创 2020-07-24 22:00:28 · 202 阅读 · 0 评论 -
leetcode 1025.除数博弈
原题1025.除数博弈2020年7月24日 每日一题题解方法一 数学判断奇输偶赢。本思路java代码示例://2020.05.13 17:41//执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户//内存消耗 :36.7 MB, 在所有 Java 提交中击败了10.00%的用户class Solution { public boolean divisorGame(int N) { return N%2==0; }}/*数字N原创 2020-07-24 08:31:02 · 171 阅读 · 0 评论 -
leetcode 873.最长斐波那契子数列长度
原题873.最长斐波那契子数列长度题解方法一 暴力集合法为了找出最长的斐波那契数列长度,我们不不妨把所有的斐波那契数列尽可能的长度找出来,再取得其中的最大值。具体方法是,首先把数组中所有的数字放入一个hashset中以备查验,再利用双指针确定数列的前两个数字(事实上,我们想象中的最短是2,而在实际输出答案的时候,小于3的都视为长度0),依次查找两个数字的和是否在集合中,是的话,把两数之和看做较大的数,原先较大的数看做较小的数,继续上述步骤,直到集合中找不到两数之和为止。本思路java代码示例:原创 2020-07-22 22:06:10 · 433 阅读 · 0 评论 -
leetcode 154.寻找旋转排序数组中的最小值 II
原题154.寻找旋转排序数组中的最小值 II同 剑指offer 11.旋转数组的最小数字2020年7月22日 每日一题题解方法一 暴力法旋转之前的数组是排好序的了的,那么说明最小值的那个地方一定比前一个值是小的,这样我们找到了这样的值就直接返回即可。需要注意的是,假如说数组旋转后依旧是单增,那么我们找不到这样的值,这时直接返回首项即可。本思路java代码示例:/*作者@v7fgg *执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户 *内存消耗 :39.7 MB原创 2020-07-22 15:07:25 · 107 阅读 · 0 评论 -
leetcode 844.比较含退格的字符串
/*@v7fgg执行用时:8 ms, 在所有 Java 提交中击败了5.99%的用户内存消耗:40 MB, 在所有 Java 提交中击败了33.33%的用户2020年7月21日 21:48*/class Solution { public boolean backspaceCompare(String S, String T) { return newstring(S).equals(newstring(T)); } public String newst原创 2020-07-22 08:47:19 · 83 阅读 · 0 评论 -
leetcode 167.两数之和 II-输入有序数组
原题167.两数之和 II-输入有序数组2020年7月20日 每日一题题解方法一 暴力法遍历所有数字对儿,直到找到和为target的两个数。本思路java代码示例:/*@v7fgg执行用时:218 ms, 在所有 Java 提交中击败了10.25%的用户内存消耗:40 MB, 在所有 Java 提交中击败了6.67%的用户2020年7月20日 8:23*/class Solution { public int[] twoSum(int[] numbers, int tar原创 2020-07-20 10:30:24 · 213 阅读 · 0 评论 -
leetcode LCP 07.传递信息
原题LCP 07.传递信息题解方法一 动态规划动态规划说明某一种状态一定与前一种或者前几种状态有关。我们不妨设立一个二维数组ans,其中ans[j][i]表示的是,从0开始,通过j+1步到达i的方式种数。在一开始的时候,我们需要初始化第0行,也就是从0位置开始,第一步就能到达的地方;之后再根据从1到k-1,每一种步数用一个循环周期,在每个循环周期内遍历relations,ans[j][i]等于所有ans[j-1][k]的和,其中k表示的是relation中第二位置是i的第一个位置的值。本思路j原创 2020-07-19 15:59:28 · 230 阅读 · 0 评论 -
leetcode 1267.统计参与通信的服务器
原题1267.统计参与通信的服务器题解方法一 暴力法就是遍历数组矩阵中所有1 的位置,查看在本行本列有木有其他的1,有的话说明可以通信。本方法java代码示例:/*@v7fgg执行用时:3 ms, 在所有 Java 提交中击败了72.48%的用户内存消耗:47 MB, 在所有 Java 提交中击败了100.00%的用户2020年7月18日 15:44*/class Solution { public int countServers(int[][] grid) {原创 2020-07-18 16:03:12 · 245 阅读 · 0 评论 -
leetcode 97.交错字符串
原题97.交错字符串2020年7月18日 每日一题题解我们可以把s1和s2拆为若干份并且交替排列组成一个字符串s4,s1和s2中的字母先后顺序与在生成的s4中的字母顺序相同,题目的意思是,假如某个s4与s3相同,那么就是真。方法一要想判断s1和s2所有的字母可否交替组成s3,我们需要预先判断一下部分的s1前缀和部分s2前缀能否组成部分的s3前缀,这就引出了动态规划。我们设置一个boolean类型的二维数组keyi[][],坐标ij来表示的是s1的前i位和s2的前j位可否交替表示s3的前i+j位原创 2020-07-18 14:53:08 · 238 阅读 · 0 评论 -
leetcode 1347.制造字母异位词的最小步骤
原题1347.制造字母异位词的最小步骤题解本题的实质就是,在不考虑字母顺序的情况下,统计两个单词有多少个字母是相同的。方法一既然单词中的字母是不一定按照顺序排列的,我们不妨先把单词中字母按顺序排列(方法是先转化成数组,然后sort)。用两个指针指向排序后的两个数组,遇到相同的字母时,记录相同字母个数的变量自加1,俩指针分别后移;遇到不同的时候,较小的那个指针后移,直到某一个数组指针移出数组。用单词长度减去相同字母个数就是所求。本思路java代码示例:/*@v7fgg执行用时:21 ms,原创 2020-07-18 14:26:55 · 159 阅读 · 0 评论 -
leetcode 35.搜索插入位置
原题35.搜索插入位置2020年7月17日 每日一题题解方法一暴力法。由于是排过序的数组,那么我们就可以遍历数组,当找到第一个不小于target的值的数时,说明此处是插入的位置。而如果所有遍历完之后,都没有发现不小于target的数,说明应该插入到最后面,也即是nums.length的位置。本思路java代码示例:/*@v7fgg执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:39.7 MB, 在所有 Java 提交中击败了5.55%的用户2020年原创 2020-07-17 11:16:17 · 118 阅读 · 0 评论 -
leetcode 剑指offer 59-II.队列的最大值
原题剑指offer 59-II.队列的最大值/*@v7fgg执行用时:46 ms, 在所有 Java 提交中击败了14.83%的用户内存消耗:48.1 MB, 在所有 Java 提交中击败了100.00%的用户2020年7月16日 19:53*/class MaxQueue { List<Integer> list; public MaxQueue() { list=new ArrayList<>(); } p原创 2020-07-17 07:33:51 · 125 阅读 · 0 评论 -
leetcode 410.分割数组的最大值
原题410.分割数组的最大值题解方法一 试值+二分1、 我们既然要求出的是每组数字之和的最大值,并且尽可能让这个最大值最小,这样的话暴力组合出所有情况不现实。那么我们就可以反着来思考,那就是,假设一个最小的“和的最大值”,假如设为max,再带入到数组中看是否能够保证每组和的值都不大于max的情况下,分出的组数不大于m。2、 假设max的临时值是max1,我们可以不断遍历数组,同时,从第一个数字开始累加,累加值到sum,每当累加到最大的不大于max1的值的时候(事实是当累加到大于m的时候,把数组原创 2020-07-16 16:08:00 · 256 阅读 · 0 评论 -
leetcode 面试题 16.26.计算器
原题面试题 16.26.计算器题解方法一 转化为若干数字的和总说:在多则运算中,乘法和除法的优先级比加减法要高,因此在运算的时候,我们要先把数字两边有乘除号的那些数字看做整体优先运算出结果,然后再把所有代表结果的数字的数字相加就是最终的结果。思路步骤:1、 首先建立一个ArrayList list来存储所有待加的数字(当然如果某个数字或者某个乘除字符段之前是减号,那我们在存入数字的实后可以去相反数,这一点在下面步骤4会提到的);2、 利用一个变量i作为指针,从头到尾来遍历s的所有字符,当然原创 2020-07-15 16:13:46 · 277 阅读 · 0 评论 -
leetcode 96.不同的二叉搜索树
原题96.不同的二叉搜索树2020年7月15日 每日一题题解方法一 递推本思路java代码示例:/*@v7fgg执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户内存消耗:36.3 MB, 在所有 Java 提交中击败了7.69%的用户2020年7月15日 8:06*/class Solution { public int numTrees(int n) { if(n<2){return 1;} int ans[]原创 2020-07-15 08:22:26 · 102 阅读 · 0 评论 -
leetcode 面试题48.最长重复字符的子字符串
/*@v7fgg执行用时:199 ms, 在所有 Java 提交中击败了5.02%的用户内存消耗:40.6 MB, 在所有 Java 提交中击败了100.00%的用户2020年7月14日 22:04*/class Solution { public int lengthOfLongestSubstring(String s) { int ans=0; for(int i=0;i<s.length()&&s.length()-i>原创 2020-07-14 22:32:59 · 203 阅读 · 0 评论 -
leetcode 剑指offer 62.圆圈中最后剩下的数字
/*模拟法@v7fgg执行用时:1077 ms, 在所有 Java 提交中击败了17.67%的用户内存消耗:41.5 MB, 在所有 Java 提交中击败了100.00%的用户2020年7月14日 16:01*/class Solution { public int lastRemaining(int n, int m) { List<Integer> ans=new ArrayList<>(); for(int i=0;i<原创 2020-07-14 21:42:14 · 140 阅读 · 0 评论 -
leetcode 120.三角形最小路径和
原题120.三角形最小路径和2020年7月14日 每日一题题解方法一 回溯法建立回溯函数,在函数内,自顶向下逐渐分支并计算和,把每一条的和都求最小值。但是,此方法的复杂程度随着层数成指数型爆炸,这个思路也因此超时。不成功的代码://42 / 43 个通过测试用例 状态:超出时间限制class Solution { int ans=Integer.MAX_VALUE; public int minimumTotal(List<List<Integer>&原创 2020-07-14 11:29:12 · 112 阅读 · 0 评论 -
leetcode 350.两个数组的交集 II
原题350.两个数组的交集 II2020年7月13日 每日一题题解方法一利用hashmap来记录数组1的每个数字的个数,之后再遍历数组2,找出与数组1中的相同的数字,但是要取数量较小的那个,一个个加入到list中,再把它转化为数组。本思路java代码示例:/*hashmap法 *作者@v7fgg *执行用时 :7 ms, 在所有 Java 提交中击败了22.05%的用户 *内存消耗 :39.9 MB, 在所有 Java 提交中击败了5.13%的用户 *2020年5月25日 21:56原创 2020-07-13 08:12:11 · 198 阅读 · 1 评论 -
leetcode 174.地下城游戏
原题174.地下城游戏2020年7月12日 每日一题原题方法一 动态规划建立一个和原矩阵维度相同的矩阵,用于表示进入每一个格子之前应该至少有的生命值才能保证在之后到达最后一个格子之后生命力至少为1。本思路java代码示例:/*@v7fgg执行用时:2 ms, 在所有 Java 提交中击败了96.34%的用户内存消耗:39.3 MB, 在所有 Java 提交中击败了100.00%的用户2020年7月12日 18:19*/class Solution { public int原创 2020-07-13 07:32:40 · 173 阅读 · 0 评论 -
leetcode 315.计算右侧小于当前元素的个数
原题315.计算右侧小于当前元素的个数class Solution { public List<Integer> countSmaller(int[] nums) { List<Integer> ans=new ArrayList<>(); for(int i=0;i<nums.length;i++){ int k=0; int x=nums[i];原创 2020-07-12 06:59:27 · 97 阅读 · 0 评论 -
leetcode 188.买卖股票则最佳时机 IV
/*@v7fgg执行用时:437 ms, 在所有 Java 提交中击败了5.02%的用户内存消耗:40 MB, 在所有 Java 提交中击败了11.11%的用户2020年7月10日 16:48*/class Solution { public int maxProfit(int k, int[] prices) { if(prices.length==0||k==0){return 0;} k=Math.min(k,prices.length/2);//防原创 2020-07-11 07:29:09 · 164 阅读 · 0 评论