题目相关 题目链接 LeetCode中国,https://leetcode-cn.com/problems/decode-string/。注意需要登录。 题目描述 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 ...

题目相关 题目链接 LeetCode中国,https://leetcode-cn.com/problems/valid-parentheses/。 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足:     左括号必须用相同类型的右括号闭合。     左括号必须以正...

题目相关 题目链接 LeetCode中国,https://leetcode-cn.com/problems/valid-perfect-square/。 题目描述 给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。 说明:不要使用任何内置的库函数,如  sqrt。 示例 示例1 示例2 题目分析 LeetCode 给出本题难度简...

简单记录一个原则,慎用浮点数比较。 问题由来 给一个朋友忽悠了,去写讲解一下 AtCoder Beginner Contest。既然是讲课,备课肯定是必须的。 题目链接为https://atcoder.jp/contests/abc161/tasks/abc161_b。 Problem Statement We have held a popularity poll for N items on ...

题目相关 题目链接 LeetCode中国,https://leetcode-cn.com/problems/letter-case-permutation/。注意需要登录。 我的OJ,http://47.110.135.197/problem.php?id=5257。 题目描述 给定一个字符串 S,通过将字符串 S 中的每个字母转变大小写,我们可以获得一个新的字符串。...

题目描述 算法 (动态规划) O(n2)O(n^2)O(n2) f(i, d) 表示从下标 0 到 i 能构成的最长的公差为d的等差数列 如果位置j存在以d为公差的等差数列,那么 f[i][d] = max(f[i][d], f[j][d] + 1); 否则此时 i 只能和 j 构成一个长度为2的等差数列,f[i][d] = max(f[i][d], 2); 注意:因为不知道f第二维要开多大,且可...

题目描述 算法 (贪心,哈希表,排序) O(nlogn)O(nlogn)O(nlogn) 核心问题:一个数组如何按元素出现的次数排序,即[2,2,3,3,2,1]排序后变为[2,2,2,3,3,1] 解决方法:借助map存下元素出现的次数,然后按value排序,根据贪心,我们肯定按照次数从多到少的顺序删除 时间复杂度是O(nlogn)O(nlogn)O(nlogn),空间复杂度是O(n)O(n)O...

题目描述 原题链接 算法 (线性扫描) O(n+m)O(n + m)O(n+m) 设两个链表的长度分别为a + c和b + c(c是它们相交的一段长度) 用两个指针p, q分别指向两个链表,p走a + c步后,让p = 另一个链表的起点,然后继续走,q走b + c步后,让q = 另一个链表的起点,然后继续走 最后如果p和q相同且不是NULL,则它们相交,返回p或q即可 时间复杂度是O(n+m)O(...

题目描述 原题链接 算法 (单调栈) O(n)O(n)O(n) 从后往前,维护一个单调严格递减的栈,如果nums[i]大于等于栈顶元素,则不断出栈,直到不满足要求 然后让nums[i]等于栈顶元素(表示下一个比它更大的数),如果栈为空,就让nums[i] = -1 因为是循环数组,所以我们要copy一份nums 时间复杂度是O(n)O(n)O(n):遍历一次数组,空间复杂度是O(n)O(n)O(n...

题目描述 原题链接 算法 (插入排序) O(n)O(n)O(n) 新建一个虚拟头结点dummy,然后每次从题目所给的链表中取出一个未排序的数x,找到下一个结点的值比x大的结点p,然后在p结点插入这个值为x的结点,因为是在原有链表上进行操作,所以不需要额外的空间 时间复杂度是O(n)O(n)O(n),空间复杂度是O(1)O(1)O(1) 代码...

题目描述(中等难度) 原题链接 算法 (递归) O(n)O(n)O(n) 当我们用递归去做这个题时不要被题目误导,应该要明确一点 这个函数的功能有三个:给定两个节点p和q 如果p和q都存在,则返回它们的公共祖先; 如果只存在一个,则返回存在的一个; 如果p和q都不存在,则返回NULL 题目说给定的两个节点都存在,那自然还是能用上面的函数来解决 具体思路: 如果当前结点root等于NULL,则直接返...

题目描述(中等难度) 原题链接 算法 (模拟) O(n∗m)O(n*m)O(n∗m) 相似的题目有:54. 螺旋矩阵 遍历过程中只有四个方向,而且是按顺序选择方向的 我们将做n*m次循环 每次循环先把当前可走的点加到res中 然后利用(a,b)找到下一个可以走的点 再让(x,y)变成下一个可走的点,然后进入下一个循环 由于往右和往下的方向每次最多走一次,所以每次循环结束...