- 博客(64)
- 收藏
- 关注
原创 JZ36 两个链表的第一个公共结点 python
my versionclass Solution: def FindFirstCommonNode(self , pHead1 , pHead2 ): if pHead1 is None or pHead2 is None: return None dic = {} len1, len2 = 0, 0 p = pHead1 while p: if p.val not .
2021-10-13 23:08:14 97
原创 JZ33 丑数 python
JZ33 丑数 # -*- coding:utf-8 -*-class Solution: def GetUglyNumber_Solution(self, index): if index <= 1: return index ugly = [1] idx_2, idx_3, idx_5 = 0,0,0 while len(ugly) < index: cur_ugly
2021-09-05 20:03:55 105
原创 剑指 Offer 48. 最长不含重复字符的子字符串 python
剑指 Offer 48. 最长不含重复字符的子字符串my version举例分析错误记录忘记平时移动中累加长度’a’“pwwkew”class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ ret = 0 max_diff_str_len = 0 # 存放
2021-09-04 15:04:33 113
原创 剑指 Offer 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值class Solution(object): def maxValue(self, grid): """ :type grid: List[List[int]] :rtype: int """ if not grid: return m = len(grid) n = len(grid[0]) max_v
2021-09-02 14:04:06 75
原创 剑指 Offer 46. 把数字翻译成字符串 python
剑指 Offer 46. 把数字翻译成字符串class Solution(object): def translateNum(self, num): """ :type num: int :rtype: int """ if num == 0: return 1 # 将数字按每一位转换为数组 nums = [] while num:
2021-09-01 22:42:01 110
原创 JZ32 把数组排成最小的数 python
JZ32 把数组排成最小的数my version求所有排列的集合再求最小值注意求排列的写法class Solution: def __init__(self): self.num = [] def permutation(self, numbers, start): if start == len(numbers): s = '' for j in range(len(numbers)):
2021-09-01 22:37:21 151
原创 JZ31 整数中1出现的次数(从1到n整数中1出现的次数) pyhton
JZ31 整数中1出现的次数(从1到n整数中1出现的次数)my version1不考虑时间复杂度,判断每个数字中1的个数class Solution: def is_with_1(self, n): count = 0 while n: if n % 10 == 1: count += 1 n = n // 10 return count def Numbe
2021-09-01 18:04:23 50
原创 JZ30 连续子数组的最大和 python
JZ30 连续子数组的最大和my version错误记录把每次连续加和的最大值记错为每个出现的最大值class Solution: def FindGreatestSumOfSubArray(self, array): if array: con_sum = [] for i in range(len(array)): con_sum.append(array[i])
2021-09-01 15:34:16 91
原创 JZ63 数据流中的中位数 python
JZ63 数据流中的中位数my version# -*- coding:utf-8 -*-class Solution: def __init__(self): self.data = [] def Insert(self, num): self.data.append(num) self.data.sort() def GetMedian(self): if self.data: len
2021-09-01 14:37:21 71
原创 JZ29 最小的K个数 python
JZ29 最小的K个数my version选择排序时间复杂度O(kn)class Solution: def GetLeastNumbers_Solution(self, tinput, k): for i in range(k): min_idx = i for j in range(i+1, len(tinput)): if tinput[min_idx] > tinput[j]:
2021-08-31 15:36:41 89
原创 JZ28 数组中出现次数超过一半的数字 python
JZ28 数组中出现次数超过一半的数字my versionclass Solution: def MoreThanHalfNum_Solution(self, numbers): dic = {} # {num: count} count = len(numbers) // 2 for n in numbers: if n in dic: dic[n] += 1 el
2021-08-30 22:19:32 119
原创 JZ27 字符串的排列 python
JZ27 字符串的排列动态规划把问题分解为两步:求第一个字符为所有可能的字母(把第一个字母和后面所有与第一个字符不等的字符交换)固定第一个字符,求后面字符的排序数组转换为字符串eg.[‘a’, ‘b’]想转换为字符串,可用''.join(['a', 'b'])得到’ab’class Solution: def __init__(self): self.ret = [] def dp(self, s, i): if i == len(s):
2021-08-30 20:36:54 70
原创 JZ61 序列化二叉树 python
JZ61 序列化二叉树先序遍历构造class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def Serialize(self, root): # write code here if not root: return '#'
2021-08-29 20:01:16 139
原创 JZ26 二叉搜索树与双向链表 python
JZ26 二叉搜索树与双向链表中序遍历class Solution: def dfs(self, node): if not node: return if node.left: self.dfs(node.left) node.left = self.pre if self.pre: self.pre.right = node self.p
2021-08-29 18:11:53 84
原创 JZ25 复杂链表的复制 python
JZ25 复杂链表的复制哈希表my version错误记录复制首节点时,不能np_指针不能往后移,否则会为空class RandomListNode: def __init__(self, x): self.label = x self.next = None self.random = Noneclass Solution: # 返回 RandomListNode def Clone(self, pHead):
2021-08-29 15:47:41 172
原创 JZ24 二叉树中和为某一值的路径 python
JZ24 二叉树中和为某一值的路径my version错误记录复制内容时,注意是否为引用self.ret.append(copy.deepcopy(path))由于这里的path是引用,因此如果直接self.ret.append(path)之后随着path改变,self.ret中的值也会跟着改变import copyclass TreeNode: def __init__(self, x): self.val = x self.left = Non
2021-08-28 21:19:36 76
原创 JZ23 二叉搜索树的后序遍历序列 python
JZ23 二叉搜索树的后序遍历序列后序遍历得到的序列,最后一个值为根节点的值,数组中前面的数字分为两部分第一部分是左子树节点的值,他们都比根节点的值小,第二部分是右子树节点的值,他们都比根节点的值大错误记录当需要判断一个范围内数字与某个数字的大小情况时,先判断这个范围是否为空class Solution: def dfs(self, arr, start, end): if start >= end: return True
2021-08-28 18:21:56 138
原创 JZ59 按之字形顺序打印二叉树 python
JZ59 按之字形顺序打印二叉树my version错误记录自行添加特殊符号后,没有判断边界条件from queue import Queue class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def Print(self, pRoot): if not pR
2021-08-28 00:23:53 78
原创 JZ22 从上往下打印二叉树 python
JZ22 从上往下打印二叉树my versionfrom queue import Queue class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: # 返回从上到下每个节点值列表,例:[1,2,3] def PrintFromTopToBottom(self, root):
2021-08-27 21:54:52 84
原创 JZ21 栈的压入、弹出序列 python
JZ21 栈的压入、弹出序列my version错误记录遇到数组下标可能越界的情况,需要把判断越界条件写在前面,比如while push_idx < len(pushV) and pushV[push_idx] != popV[pop_idx]: and前后顺序颠倒会出错# -*- coding:utf-8 -*-class Solution: def IsPopOrder(self, pushV, popV): if len(pushV) != len(pop
2021-08-27 21:18:30 110
原创 JZ20 包含min函数的栈 python
JZ20 包含min函数的栈my version错误记录栈为空的特殊判断class Solution: def __init__(self): self.stack = [] self.min_stack = [] def push(self, node): self.stack.append(node) if self.min_stack: self.min_stack.appe
2021-08-27 18:32:44 105
原创 JZ19 顺时针打印矩阵 python
JZ19 顺时针打印矩阵可以将矩阵看成若干层,首先打印最外层的元素,其次打印次外层的元素,直到打印最内层的元素。对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当前层的左上角位于 (top,left),右下角位于(bottom,right),按照如下顺序遍历当前层的元素。1、从左到右遍历上侧元素,依次为(top,left) 到(top,right)。2、从上到下遍历右侧元素,依次为(top+1,right) 到 (bottom,right)。3、如果 left<right 且top&
2021-08-26 21:41:19 322
原创 JZ58 对称的二叉树 python
JZ58 对称的二叉树先序遍历 根左右 同时根右左class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def bfs(self, r1, r2): if not r1 and not r2: return True if not r
2021-08-26 18:05:54 63
原创 JZ18 二叉树的镜像
JZ18 二叉树的镜像class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def Mirror(self , pRoot ): if not pRoot: return pRoot.left, pRoot.right = pRoot
2021-08-26 17:36:36 56
原创 JZ17 树的子结构 python
JZ17 树的子结构class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def dfs(self, r1, r2): if r2 is None: return True if r1 is None: retu
2021-08-26 17:34:09 95 1
原创 JZ16 合并两个排序的链表 python
JZ16 合并两个排序的链表my versionclass ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): pHead = ListNode(-1) p = pHead while pHead1 and p
2021-08-26 00:39:06 112
原创 JZ15 反转链表 python
JZ15 反转链表my versionclass ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: # 返回ListNode def ReverseList(self, pHead): if pHead: p = pHead pp = pHead # 要插入的节点
2021-08-26 00:26:12 80
原创 JZ55 链表中环的入口结点 python
JZ55 链表中环的入口结点my versionclass ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def EntryNodeOfLoop(self, pHead): p = pHead l = [] while p.next: l.append((p.val, p
2021-08-25 23:20:35 83
原创 JZ14 链表中倒数最后k个结点 python
JZ14 链表中倒数最后k个结点my versionclass ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def FindKthToTail(self , pHead , k ): # write code here length = 0 p = pHead
2021-08-25 18:45:22 68
原创 JZ13 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分my version快速排序的四种写法错误记录在函数里要交换数组里的值需要将数组的地址也传过去class Solution: def swap(self, a, i, j): a[i] = a[i]^a[j] a[j] = a[i]^a[j] a[i] = a[i]^a[j] def reOrderArra
2021-08-22 22:26:28 37
原创 JZ53 表示数值的字符串 python
JZ53 表示数值的字符串描述请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。科学计数法的数字(按顺序)可以分成以下几个部分:1.若干空格2.一个整数或者小数3.(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个整数(可正可负)4.若干空格小数(按顺序)可以分成以下几个部分:1.若干空格2.(可选)一个符号字符(’+’ 或 ‘-’)3. 可能是以下描述格式之一:3.1 至少一位数字,后面跟着一个点 ‘.’3.2 至少一位数字,后面跟着一个点 ‘.’
2021-08-22 17:47:23 58
原创 JZ52 正则表达式匹配 python
JZ52 正则表达式匹配my version错误记录“aaa”,“a*a” 未通过“” , “.*” 未通过“”,"." 未通过“a”,".*" 未通过“ab”,".*" 未通过class Solution: def match(self , string , pattern ): p_string = 0 p_pattern = 0 while p_string < len(string): if
2021-08-21 23:39:49 55
原创 JZ56 删除链表中重复的结点 python
JZ56 删除链表中重复的结点错误记录1->1->2 头节点可能被删除1->1->2->21->1->2->3->3->4->5->5class Solution: def find_no_repeat(self, node): p = node if p and p.next: if p.val != p.next.val:
2021-08-20 23:29:11 107
原创 JZ12 数值的整数次方 python
JZ12 数值的整数次方注意考虑特殊情况,如exponent为负数my versionclass Solution: def Power(self, base, exponent): if exponent < 0: exponent = -exponent ex_flag = 1 else: ex_flag = 0# if base == exponent ==
2021-08-20 13:30:45 83
原创 JZ11 二进制中1的个数 python
JZ11 二进制中1的个数my version未通过所有样例,内存超过限制内存class Solution: def NumberOf1(self, n): if n >= 0: symbol = 0 else: symbol = 1 binary = [] while n: binary.append(n % 2) n = n
2021-08-19 23:47:06 86
原创 JZ67 剪绳子 python
JZ67 剪绳子book method1动态规划求一个问题的最优解整体问题的最优解依赖于各个子问题的最优解子问题之间存在互相重叠的更小的子问题从上往下分析,从下往上求解问题设有长度为n的绳子,则第一刀可以切在第i处,0<i<n,则f(n)=max(f(i)∗f(n−i))f(n) = max(f(i)*f(n-i))f(n)=max(f(i)∗f(n−i))从小开始分析n=0,1时f(n)=0,n=2时f(n)=1,n=3时f(n)=2class Solution:
2021-08-19 20:24:15 119
原创 JZ66 机器人的运动范围 python
JZ66 机器人的运动范围my versiondfs错误记录a = b = [x for x in range(n)] 会使a、b指向同一空间由于机器人从[0,0]开始运动,因此只有向右和向下两个方向可以走class Solution: def dfs(self, i, j, thre, rows, cols):# print(i,j) if i<0 or i>=rows or j<0 or j>=cols or self.
2021-08-17 22:10:24 107
原创 JZ65 矩阵中的路径 python
JZ65 矩阵中的路径book method回溯算法我们看到他是从矩形中的一个点开始往他的上下左右四个方向查找,这个点可以是矩形中的任何一个点,所以代码的大致轮廓我们应该能写出来,就是遍历矩形所有的点,然后从这个点开始往他的4个方向走,因为是二维数组,所以有两个for循环。每一个点我们都可以往他的4个方向查找,所以我们可以把它想象为一棵4叉树,就是每个节点有4个子节点,而树的遍历我们最容易想到的就是递归。DFShttps://zhuanlan.zhihu.com/p/355968635cl
2021-08-17 21:08:51 118
原创 JZ6 旋转数组的最小数字 python
JZ6 旋转数组的最小数字my version时间复杂度O(n)错误记录特殊样例:数组未进行旋转如[1,2,3] 找最小 1class Solution: def minNumberInRotateArray(self, rotateArray): if rotateArray: for i in range(1, len(rotateArray)): if rotateArray[i-1]>rotateA
2021-08-16 20:36:15 91
原创 numpy.array二维列表 按某列的key排序
numpy.argsort()返回排序索引example:按第2列排序a=a[np.argsort(a[:,2]),:]
2021-08-15 10:41:56 220
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人