自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

monarch

Personal Blog

  • 博客(52)
  • 收藏
  • 关注

原创 (python version) 299. 猜数字游戏

文章目录题目描述解题思路自己解别人的解法Python 代碼题目描述(Source: LeetCode 力扣)解题思路自己解二层扫描,第一次扫描位置 (A) 的数量,第二次扫描 B 的数量空间:使用 candidate_list & scan_list 去保存要扫描 B 的数量别人的解法O(N)*先扫描一次,把不是位置匹配的(A)存进字典,利用加减的方式去计算不匹配数字*真实数字出现在秘密里,在字典计数+1真实数字出现在猜测里,在字典计数-1这样一增一减消消弭先后顺序的

2021-08-21 16:02:42 125

原创 (python version) 劍指offer 52. 两个链表的第一个公共节点

文章目录题目描述解題思路Python 代碼题目描述输入两个链表,找出它们的第一个公共节点。來源:力扣(LeetCode)如下面的两个链表:解題思路以題目的示例 1 為例: skipA=2 代表鏈表A前兩個不是公共節點 ; skipB=3 代表鏈表B 前三個不是公共節點。這裡隱含了我們接下來的解法可以參考『長度』指針 & 鏈表的關係使用設定指針去分別計算兩個鏈表的長度若無設定指針的話,headA & headB 的值會發生改變第一步:先算出兩個鏈表的長度,

2021-02-23 20:37:09 102

原创 (python version) 劍指offer 50. 第一个只出现一次的字符

文章目录题目描述解題思路Python 代碼题目描述在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。來源:力扣(LeetCode)解題思路用空間換取時間兩層掃描,所花時間為 O(N)Python 代碼class Solution: def firstUniqChar(self, s: str) -> str: if s is None: return ' ' cnt_dict

2021-02-21 15:36:23 106

原创 (python version) 劍指offer 49. 丑数

文章目录题目描述解题思路Python 代码参考资源题目描述我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。来源:力扣(LeetCode)解题思路利用动态规划可以达到 O(N) 线性时间完成用 Python 理解动态规划:分治法(divide and conquer)+记忆法 (memorization)分治法的流程是切割问题、解决问题、合併解答。在找寻问题时子问题与原问题相同但范围不同被称为 递迴(recurrence)

2021-02-19 21:47:41 80

原创 (python version) 劍指offer 48. 最长不含重複字符的子字符串

这里写自定义目录标题題目描述解題思路Python 代碼題目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。來源:力扣(LeetCode)解題思路費布那契數列F0=0F1=1Fn=F(n+)+F(n−2)(n≥2)\begin{array}{l}F_0=0\\F_1=1\\F_n=F_{\left(n+\right)}+F_{\left(n-2\right)}\left(n\geq2\right)\end{array}F0​=0F1​=1Fn​=F(n

2021-02-18 22:25:28 84 1

原创 [Datawhale Camp] Task05- Neo4j 图数据库查询

Content1.任務理解2.實戰練習2.1 Cypher 基礎語法2.2 Neo4j查詢過程分解2.3 補充知識點3.參考資料1.任務理解在 Neo4j 當中使用 Cypher 語法進行疾病(實體)、疾病與其屬性(邊)的查詢,同時輸入進 Neo4j 的問題須先經過實體抽取。2.實戰練習2.1 Cypher 基礎語法# Node 表示(d) // disease (s) // syptom# Edge -[:HAS_SYMPTOM]-> /

2021-01-17 22:53:51 372

原创 [Datawhale Camp] Task04- 从用户输入到知识库的查询语句

Content任務理解問答系統定義問題定義類型實戰練習任務理解問答系統的範疇問答系統的準確度取決於 Query 的方法不同規則式統計/機器學習分類模型 e.g. HMM, CRF深度學習模型 e.g. LSTM, BERT結合以上,取其所長 e.g. Bi-LSTM+CRF問答系統定義問答系統外部的行為上來看,其與目前主流資訊檢索技術有兩點不同:首先是查詢方式為完整而口語化的問句,再來則是其回傳的為高精準度網頁結果或明確的答案字串。問題定義類型問答系統的 input 是自然

2021-01-15 22:06:01 349

原创 [Datawhale Camp] Task03- Neo4j 图数据库导入数据

@ TOC

2021-01-14 00:13:25 240 2

原创 [Datawhale Camp] Task02- 基于医疗知识图谱的问答系统操作介绍

這裡寫自定義目錄標題#Intro

2021-01-13 00:46:03 330

原创 [Datawhale Camp] Task01- 知识图谱介绍

文章目录

2021-01-11 21:28:53 468

原创 (python version) 劍指offer 47. 礼物的最大价值

题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?来源:力扣(LeetCode)解题思路动态规划题(DP)method1 遍历相加用了最笨的方法,O(N^2) ,遍历全部,最后返回最右下角的值。透过边界条件判断,是否有 left or top ,透过 res_grid 储存作为返回值。

2020-08-22 14:03:34 117

原创 (python version) 劍指offer 46. 把数字翻译成字符串

題目描述解題思路Python代碼

2020-08-01 13:40:48 132

原创 (python version) 剑指 offer 45. 把数组排成最小的数

题目描述输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。来源:力扣(LeetCode)解题思路方法一python3 当中的自定义排序:使用 functools 模块当中的 cmp_to_key。详细说明:python3 中自定义排序原理@知乎是 python2 的 list.sort() 与 python3 兼容,自定义排序规则的方法。将不同长度的字符串进行排列,例如:s = [‘52’, ‘5’, ‘50’, ‘51’]。若使用 s

2020-07-25 15:56:08 280

原创 (python version) 剑指 offer 44. 数字序列中某一位的数字

题目描述数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。来源:力扣(LeetCode)解题思路归纳格式化序列字符串 0123456789101112131415.... 的規律大致以输入的指定位数进行分类 => 举例:12 , 1001判断输入的指定位数,其数字组成位于几位数组成的数字举例 12 : 12-10 <

2020-07-25 13:01:18 180

原创 (python version) 剑指 offer 43. 1~N 整数中1出现的次数

題目描述输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。来源:力扣(LeetCode)解題思路参考剑指 book 当中的举例方法。透过实例 21345 当做例子,分成最高位>1 以及 最高位=1 两种情况:如果最高位大于1的话,则有完整的 1 * (总位数-1) 个1,最高位是2,因此 total 有 1X10000 个 1; 但如果最高位是1的话,只有后一位数以后的个数

2020-07-25 11:34:23 146

原创 (python version) 劍指offer 42. 连续子数组的最大和

题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。來源:力扣(LeetCode)解题思路由于最大 连续子数组和为不固定长度,且时间复杂度要求在 O(N) 内完成。因此在 nums 中每一个数字进入时,尙未加入当前数字前,需要写条件进行判断:若前面累加 ( res ) 为负数的话,则 res 更新为当前数字 nums[i] 。等同于 res 重新计算加总 => 从 nums[i] 开始计算是

2020-07-18 16:39:39 129

原创 (python version) 剑指 offer 41. 数据流中的中位数

题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。来源:力扣(LeetCode)例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素

2020-07-18 15:03:43 140

原创 (python version) 劍指offer 40. 最小的k个数

题目描述输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。來源:力扣(LeetCode)解题思路由于选择最小的 K 个数,K 为任意数,由于返回的 K 为不特定个数,且输入之 arr 需要判断至最后一个,因此时间複杂度至少为 O(N);因此以 sorted() 将 arr 进行排列后,返回前 K 个数值。分配多一点时间进行『问题拆解』,不急著开始写代码的动作,会找到 Better Solution。Py

2020-07-12 13:27:47 80

原创 (python version) 剑指offer 39. 数组中出现次数超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。來源:力扣(LeetCode)解题思路超过一半即返回该数,时间复杂度应可以在O(log N) 。Python 代码class Solution: def majorityElement(self, nums: List[int]) -> int: dict = {} n = len(nums) for i

2020-07-12 12:54:05 95

原创 (python version) 劍指offer 38. 字符串的排列

题目描述输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。來源:力扣(LeetCode)解题思路难度是 medium,归类在『分解复杂问题简单化』按照解决问题的步骤来分解复杂问题,每一步解决一个小问题。寻找字符串排列的规律:从 abc & abcd 两个例子来看以 abc 而言,可将遍历的 a, b, c 作为首字母,并与剩下的字母排列组合。举例:以a + {b.c} 形成的排列组合; b + {a,c} 形成的

2020-07-07 10:02:07 155

原创 (python version) 劍指offer 36. 二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。來源:力扣(LeetCode)解题思路递归遍历方法:从最小单元开始,深度优先搜索。中序搜索:左节点右 => 补左指向节点 & 补右指向节点新增指针:记录遍历当前节点的前一个指针; 以及判定头指针深度优先算法:先往最左边最深搜索 => 中间节点 => 最右边搜索,因此最后一个 self.prev 指針为最后一个节点头尾相连:将

2020-07-02 15:11:31 91

原创 (python version) 劍指offer 35. 复制链表的复制

题目描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。来源:力扣(LeetCode)解题思路剑指书上的方法1.方法一第一步:复制原始链表上的每个节点N、创造N’ ; 把创造出来的节点用 m_pnext链接起来; 把<N,N’>放进哈希表。第二步:设置复制链表上的 m_psibling 。如果原始链表节点N的 m_psibling 指

2020-07-01 18:19:13 146

原创 (python version) 劍指offer 34. 二叉树中和为某一值的路径

题目描述输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。解题思路Python 代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass

2020-06-29 23:47:30 93

原创 (python version) 劍指offer 33. 二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。來源:力扣(LeetCode)解题思路遍历概念当输入的 List 值为空的时候,返回 True后序遍历的顺序:小大中List 列表的最后一个数字为根节点( 小:左子; 大:右子; 中:根节点)算法时间为 O(logN) ,依序判断将 List 序列分为左子树与右子树仅需判断右子树序列的原因为:在前一步骤寻找左右子树的分节点时,已将小

2020-06-25 19:40:20 81

原创 (python version) 劍指offer 32. 从上到下打印二叉树

题目描述从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。來源:力扣(LeetCode)解题思路由上至下,由左至右遍历:需先判断根节点存在的话存进 queue,程序执行条件为当 Queue 里没有值的时候,则停止将结果存进 res 当中。首先在第一层时,Queue 里的第一位为根节点,存进返回结果 res 当中, popleft 后则 Queue 此时为空。接著判断左右子节点是否有值。若有值,则判断左子节点有值的话,存进 Queue; 接著判断右子节点如果有值的话,

2020-06-18 12:37:16 86

原创 (python version) 劍指offer 31.栈的压入、弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。来源:力扣(LeetCode)解题思路建立一个辅助栈找出弹出的第一个值位于压入栈的位置,以此位置 ix 作为分割点,分为 pushed 以及 tmp_stack 两个栈。接著以 popped 的最左

2020-06-17 13:10:27 79

原创 (python version) 劍指offer 30. 包含 min 函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。來源:力扣(LeetCode)解题思路1.Stack(栈)观念复习(a) push:将数值放入 Stack 中(b) pop:把最右边(最上边)的数值移除© min:最小的值,不影响数据结构本身(d) top:最右边(最上边)的数值,不影响数据结构本身2.解题存储最小值、次小的 List当 push 进一个新的数值 x 时,判

2020-06-16 15:47:50 88

原创 (python version) 劍指offer 29. 顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。來源:力扣(LeetCode)解题思路1.剑指基本思路建立边界条件 + 循环。从最外层开始,分成四步骤。(a ) matrix、columns 与 rows 的个数,建立第一步至第四步的解法。(b )设置边界条件,即:当 columns >2 and rows >2.(c ) 边界条件以外的特殊案例,包含了四种情况(讨论如下),如输入一个 4x4矩阵,剩馀的会是最中间的 2x2 矩阵,符合额外条件讨论的第四种

2020-06-16 00:19:54 123

原创 (python version) 劍指offer 28. 对称的二叉树

题目描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。來源:力扣(LeetCode)解题思路遍历树:使用递归思路;树的遍历包含了前序遍历、中序遍历、后序遍历。镜像:建立子函数,比较左右子节点。若我们使用前序遍历,从根节点出发。从第二层开始,以左子树的根节点与右子树的根节点为比较基础 => `compare(left_root, right_root)子函数当中:若比较值左右同为 Null,则返回 True ;若左右任一为 Nul

2020-06-14 12:36:32 81

原创 (python version) 劍指offer 27. 二叉树的镜像

题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。來源:力扣(LeetCode)解题思路保持根节点不动,当存在左子节点 or 存在右子节点的时候,交换彼此的位置。主流:递归解法。使用树的遍历算法解决问题。延伸:使用循环解法(a) 创立一个queue:起始值为 deque([root])(b) 若 queue 当中仍有值(node),将 node.left 或是 node.right 也存进 queue 当中,判断完成后,使用 deque.popleft() 将 node 从 q

2020-06-13 15:15:43 87

原创 (python version) 劍指offer 26. 树的子结构

题目描述输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。來源:力扣(LeetCode)解题思路了解树的结构:一个节点,指针分成左指针与右指针。分成两步解(a) 找到根节点是否一样,假设该节点为 R。=> 建立子函数 isSame() 。若子树B为空,则返回 True,若树A(被比较的主体)为空值,则返回 False。接下来判断子树 B的节点与树A的节点,若相等,则比较节点下的左节点与右节

2020-06-12 15:57:04 68

原创 (python version) 劍指offer 25. 合并两个排序的链表

题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。来源:力扣(LeetCode)示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路建立一个虚拟头节点,并比较两个链表的头节点。因为两个链表皆为有序排列。时间复杂度可以控制在 O(N) ,两个链表皆各遍历一次。要考虑任一个链表为空的情形,最后条件判断用 if .. else.. 写,

2020-06-11 16:38:12 66

原创 (python version) 劍指offer 24. 反转链表

题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。来源:力扣(LeetCode)示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000解题思路设置三个指针 prev、cur、nexts 。步骤如下:prev 负责存取反转指针; cur 为移动的指针; nexts 负责先暂存下一步指针(a)

2020-06-11 15:14:10 61

原创 (python version) 剑指offer 23. 链表中环的入口节点

题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。来源:力扣(LeetCode)解题思路对应剑指offer 23。确定一个链表是否有环,使用快慢指针,快指针一次走两步、慢指针一次走一步。如果走得快的指针追上了走的慢得指针,代表该链表有环。由于快指针一次走两步,需在循环当中优先判断:快指针的下一步 pos_fast.next 为空的情形,否则会出现错误。P

2020-06-09 12:02:42 115

原创 (python version) 剑指offer 22.链表中倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。解题思路链表的题目马上联想到前几题有说,想到链表的数据格式,可以建立一个虚拟节点的方式。因此首先建立一个虚拟节点,考虑需要返回倒数第K个指向链表的节点,单链表的特性为单向指针,因此需要计算链表长度(必须遍历)后再决定返回的节点是第几个。备注:此题为代码的 Ro

2020-05-26 11:53:56 135

原创 (python version) 剑指offer 21.调整数组顺序使奇位数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。解题思路想了两种方式,第一种是我觉得比较优良的方法,时间复杂度为O(N),但是返回的是 np.array 格式,不符合要求,因此需要多花一次转成List,使得时间复杂度变成 O(N^2)。第一种算法尽可能要求只遍历一次就要把奇数的往前,偶数的放后,由于不考虑数

2020-05-25 12:40:06 173

原创 (python version) 剑指offer 20.表示数值的字符串

題目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是。解題思路首先以 . 作為分割字符串,以此為主體,依照分割的個數判斷數值形式1. 分割個數若為 1最主要的邏輯判斷在此(遞歸主要使用此處):(1) 判斷正負符號次數(2) 判斷指數型態 e|E:不為首、若不為首前面不為正負號

2020-05-25 11:21:10 243

原创 (python version) 剑指offer 18.删除链表的节点

題目敘述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 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 的第三个节点,那么在调用了你的函数之后,该链表应变

2020-05-22 11:35:37 141

原创 (python version) 剑指offer 17.打印从1到最大的n位数

這一題目前牛客網上面沒有,改使用 Lettcode 力扣的測試案例。首先考慮列舉可能情形規劃算法思路、考慮邊界條件、特殊案例測試。题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数解題思路考慮大數問題:用字符串 or 用數組的方式表示(最常用)。使用字符串設定邊界條

2020-05-20 11:29:55 120

原创 (python version) 剑指offer 16.数值的整数次方 python

題目描述給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。保證base和exponent不同時為0。解題思路思考指數函數的定義底數共有三種情形:(i) base > 1(ii) 0 < base < 1(iii) base < 0底數為正數 (i)、(ii)考慮指數為正數以及負數的情形 => 使用 flag底數為負數 (iii)考慮指數為正數以及負數的情形 => 使用 fl

2020-05-19 11:52:44 131

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除