数据结构
&永恒的星河&
踏实一些、不要着急,你想要的、岁月都会给你.
展开
-
面试题-参加生日宴会的最多人数
面试题-参加生日宴会的最多人数原创 2022-09-11 13:47:26 · 290 阅读 · 0 评论 -
编程题:寻找无限循环小数的循环节及长度
寻找无限循环小数的循环节及长度原创 2022-08-15 16:06:55 · 1659 阅读 · 0 评论 -
算法题:最小跳跃次数
面试考题:最小跳跃次数原创 2022-07-31 17:37:25 · 934 阅读 · 0 评论 -
面试考点:三种图的问题
图的深度优先遍历,图的拓扑排序,图的最短路径原创 2022-07-26 16:50:20 · 218 阅读 · 0 评论 -
算法题:Good Taxi Driver
Good Taxi Driver原创 2022-07-22 12:19:07 · 312 阅读 · 0 评论 -
算法:利用Dijkstra算法求解从北京到海南最短路径
Dijkstra求解单源节点最短路径原创 2022-07-21 22:46:14 · 296 阅读 · 0 评论 -
算法题:Order of Tasks
图之拓扑排序原创 2022-07-20 17:10:49 · 263 阅读 · 0 评论 -
算法题:Find the closest common ancestor
二叉树公共祖先原创 2022-07-19 20:01:00 · 2849 阅读 · 1 评论 -
leetcode剑之offer之课程表(三十三)
1. 考察内容:拓扑排序 (自行了解)2. 题目描述你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对[0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 .原创 2022-05-17 17:53:48 · 160 阅读 · 0 评论 -
面试题之根据先序,中序,后序重构二叉树
1. 根据先序和中序遍历重构二叉树已知二叉树先序遍历和中序遍历生成的列表,根据所给列表重构出二叉树。1.1 题解思路二叉树的先序遍历的思想是:根节点->左孩子>右孩子二叉树的中序遍历的思想是:左孩子->根节点->右子树因此,先序遍历每个节点是中序遍历的序列的根节点,将中序遍历分割成左右两部分,分别对应树的左右子树。1.2 Python3实现方式preorder: 先序遍历序列; inorder: 中序遍历序列# coding:utf-8class.原创 2022-03-21 23:39:46 · 499 阅读 · 0 评论 -
leetcode剑之offer之翻转单词顺序(三十二)
题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3...原创 2022-03-10 21:02:59 · 472 阅读 · 0 评论 -
leetcode剑之offer之和为s的两个数字(三十一)
题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]题解思路双指针法Python3代码实现class Solution: def原创 2022-03-10 20:51:42 · 200 阅读 · 0 评论 -
leetcode剑之offer之调整数组顺序使奇数位于偶数前面(三十)
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。Python3代码实现class Solution: def exchange(self, nums: List[int]) -> List[int]: res = [] for s in nums:.原创 2022-03-10 20:43:52 · 180 阅读 · 0 评论 -
leetcode剑之offer之两个链表的第一个公共节点(二十九)
题目输入两个链表,找出它们的第一个公共节点。如下面的两个链表:题解思路总共走两轮即可:A走完从B开始走,B走完从A走,如果有环肯定相遇。A: 4 1 8 4 5 5 0 1 8B: 5 0 1 8 4 5 4 1 8Python3实现class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: if not hea原创 2022-03-10 20:34:32 · 271 阅读 · 0 评论 -
leetcode剑之offer之合并两个排序的链表(二十八)
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4题解思路链表Python3代码实现# coding:utf-8# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.va转载 2022-03-10 19:35:13 · 89 阅读 · 0 评论 -
leetcode剑之offer之链表中倒数第k个节点(二十七)
题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.题解思路:双指针Python3代码实现# Definition for singly-linke原创 2022-03-09 12:15:33 · 90 阅读 · 0 评论 -
leetcode剑之offer之删除链表的节点(二十六)
题目描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为1的第三个节点,...原创 2022-03-09 10:53:47 · 64 阅读 · 0 评论 -
leetcode剑之offer之最长不含重复字符的子字符串(二十五)
题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长...原创 2022-03-08 21:27:29 · 69 阅读 · 0 评论 -
leetcode剑之offer之把数字翻译成字符串(二十四)
题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1:原创 2022-03-08 17:59:58 · 115 阅读 · 0 评论 -
leetcode剑之offer之礼物的最大价值(二十三)
题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物题解思路动态规划dp[m][n] = max(dp[m-1][n], ...原创 2022-02-23 16:54:20 · 107 阅读 · 0 评论 -
leetcode剑之offer之连续子数组的最大和(二十二)
题目描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。题解思路动态规划动态方程:dp[n] = max(dp[n-1]+nums[i], nums[i])dp[n]: 表示以第n个元素结尾的前n个数和的最大值。Python3实现class Solu...原创 2022-02-23 16:30:42 · 620 阅读 · 0 评论 -
leetcode剑之offer之股票的最大利润(二十一)
题目描述假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。题解...原创 2022-02-21 15:39:39 · 125 阅读 · 0 评论 -
leetcode剑之offer之青蛙跳台阶问题(二十)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1题解思路动态规划 dp[n] = dp[n-1] + dp[n-2]dp[n]: 跳上第n个台阶方法数。Python3实现原创 2022-02-21 14:57:01 · 375 阅读 · 0 评论 -
leetcode剑之offer之斐波那契数列(十九)
题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:...原创 2022-02-21 14:36:17 · 391 阅读 · 0 评论 -
leetcode剑之offer之二对称的二叉树(十八)
题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ \2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3示例 1输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,...原创 2022-02-18 11:37:35 · 91 阅读 · 0 评论 -
leetcode剑之offer之二叉树的镜像(十七)
题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4/ \2 7/ \ / \1 3 6 9镜像输出:4/ \7 2/ \ / \9 6 31示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]题解思路树的先序遍历Python3实现# Definition for a bi...原创 2022-02-18 11:22:25 · 97 阅读 · 0 评论 -
leetcode剑之offer之树的子结构(十六)
题目描述输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,...原创 2022-02-17 17:27:21 · 84 阅读 · 0 评论 -
leetcode剑之offer之从上到下打印二叉树(十五)
题目描述请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]]编码思路树的层次遍历,借助队列来实现Python3代码实现# Defini..原创 2022-02-15 12:29:25 · 76 阅读 · 0 评论 -
leetcode剑之offer之从上到下打印二叉树(十四)
题目描述从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]编码思路树的层次遍历,借助队列实现。Python3代码实现# Definition for a binary tree node.# class ...原创 2022-02-15 12:25:30 · 57 阅读 · 0 评论 -
leetcode剑之offer之从上到下打印二叉树(十三)
题目描述从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]题目思路树的层次遍历Python3代码实现# Definition for a binary tree node.# class TreeNode:# def __init__(self, x.原创 2022-02-15 12:20:55 · 91 阅读 · 0 评论 -
leetcode剑之offer之第一个只出现一次的字符(十二)
题目描述字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例 1:输入:s = "abaccdeff"输出:'b'示例 2:输入:s = "" 输出:' 'python3实现编码思路: 切片法(python独有),也可以用hash mapclass Solution: def firstUniqChar(self, s: str) -> str: rs = " " f原创 2022-02-14 12:30:29 · 652 阅读 · 0 评论 -
leetcode剑之offer之旋转数组的最小数字(十一)
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof著作原创 2022-02-14 12:09:34 · 56 阅读 · 0 评论 -
leetcode剑之offer之二维数组中的查找(十)
题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:现有矩阵 matrix 如下:[ ..原创 2022-02-14 11:13:10 · 75 阅读 · 0 评论 -
leetcode剑之offer之在排序数组中查找数字 I(九)
题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0Python3代码实现实现方式:二分查找class Solution: def search(self, nums: List[int], target: int) -> int: return.原创 2022-02-11 17:08:26 · 334 阅读 · 0 评论 -
leetcode剑之offer之数组中重复的数字(八)
题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1:输入:[2,原创 2022-02-11 16:20:17 · 430 阅读 · 0 评论 -
leetcode剑之offer之左旋转字符串(七)
题目描述字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1输入: s = "abcdefg", k转载 2022-02-11 10:24:10 · 101 阅读 · 0 评论 -
leetcode剑之offer之替换空格(六)
题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。输入:s = "We are happy."输出:"We%20are%20happy."Python3实现class Solution: def replaceSpace(self, s: str) -> str: res = [] for s_ in s: if s_ == " ": res.append("%2原创 2022-02-10 18:06:32 · 326 阅读 · 0 评论 -
leetcode剑之offer之复杂链表的复制(五)
题目描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]Python3代码实现# Definition for a Node.class Node: def.原创 2022-02-09 11:27:26 · 71 阅读 · 0 评论 -
leetcode剑之offer之反转链表(四)
题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLPython3代码实现# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x se原创 2022-02-09 11:00:08 · 307 阅读 · 0 评论 -
leetcode剑之offer之从尾到头打印链表(三)
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。Python3代码实现# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def reversePrint(self, head: ListNode) -> List[int原创 2022-02-09 10:47:08 · 299 阅读 · 0 评论