随笔分类 - 课程 / 题
摘要:一、题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 二、思路 三、代码 class Solution: def lengthOfLongestSubstring(self, s: str) -> int: dic = {} res = tmp = 0 for j
阅读全文
摘要:一、题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 二、思路 三、代码 class Solution: def
阅读全文
摘要:一、题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 二、思路 设 f(i,j)为从棋盘左上角走至
阅读全文
摘要:一、题目 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 二、思路 若 dp[i−1]≤0,说明 dp[i−1]对 dp[i]产生负贡献,即 dp[i−1]+nums[i]还不如 nums[i]本身大。 当 dp[i−1]>0时:执
阅读全文
摘要:一、题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 二、思路 原理: 以斐波那契数列性质 f(n+1)=f(n)+f(n−1)为转移方程
阅读全文
摘要:一、题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前
阅读全文
摘要:一、题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 二、思路 考虑从顶至底递归,判断每对节点是否对称,从而判断树是否为对称二叉树。 三、代码 class Solution: def isSymmetric(self, root: TreeNode
阅读全文
摘要:一、题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二、思路 根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。 三、代码 class Solution: def mirrorTree(self, root: TreeNode) -
阅读全文
摘要:一、题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 二、思路 先序遍历树 A 中的每个节点 nA;(对应函数 isSubStructure(A, B)) 判断树 A中 以 nA为根节点的子树 是否包含树
阅读全文
摘要:一、题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 二、思路 利用双端队列的两端皆可添加元素的特性,设打印列表(双端队列) tmp ,并规定: 奇数层 则添加至 tmp 尾部 , 偶数层 则
阅读全文
摘要:一、题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 二、思路 每一层打印到一行 。 三、代码 class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root:
阅读全文
摘要:一、题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 二、思路 二叉树的 广度优先搜索(BFS)。 三、代码 class Solution { public int[] levelOrder(TreeNode root) { if(root == null) return
阅读全文
摘要:一、题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的
阅读全文
摘要:一、题目 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、思路 若 flag > target ,则 target 一定在 flag 所在 行
阅读全文
摘要:一、题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 二、思路 循环二分: 当 left ≤ right 时循环 (即当闭区间 [left, j] 为空时跳出) ; 三、代码
阅读全文
摘要:一、题目 统计一个数字在排序数组中出现的次数。 二、思路 整个数组是单调递增的,我们可以利用二分法来加速查找的过程。 三、代码 class Solution { public: int binarySearch(vector<int>& nums, int target, bool lower) {
阅读全文
摘要:一、题目 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 二、思路 在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1
阅读全文
摘要:一、题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 二、思路 反转区间为前n的子串 反转区间为n到末尾的子串 反转整个字符串 三、代码 c
阅读全文
摘要:一、题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 二、思路 在 C++ 语言中, string 被设计成「可变」的类型,因此可以在不新建字符串的情况下实现原地修改。 三、代码 class Solution { public: string replaceSpace(string
阅读全文
摘要:一、题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 二、思路 反转链表 三、代码 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *now = head, *pre =
阅读全文

浙公网安备 33010602011771号