![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python
chandelierds
这个作者很懒,什么都没留下…
展开
-
Pandas优化加速小技巧
【场景】使用Pandas对DataFrame数据某个维度进行操作,如query、id等【问题1】循环筛选符合条件的样本,使用df[df[‘query’]==‘query_1’]非常耗时【解决】使用词典结构,将同一query下的样本index放入list中,如query_idx = {“query_1”:[1,3,10],…}在筛选为query_1的样本时,直接使用df.iloc[query_idx[‘query_1’],:]进行筛选,由于使用哈希表的搜索操作,4500万数据的运行时长由300+小原创 2021-06-25 16:43:58 · 1411 阅读 · 2 评论 -
945. 使数组唯一的最小增量
思路:排序后,从第二位开始,如果小于等于前一位,就进行move+1,直到大于前一位。但时间复杂度过高。class Solution: def minIncrementForUnique(self, A: List[int]) -> int: if not A or len(A) == 1: return 0 A.sort()...原创 2020-03-22 23:58:37 · 117 阅读 · 0 评论 -
leetcode226. 翻转二叉树
同剑指offer28题:二叉树的镜像思路不管左右子节点存在与否,直接替换就好代码class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ if not root:...原创 2019-07-07 23:14:52 · 110 阅读 · 0 评论 -
leetcode26、80:删除排序数组中的重复项
文章目录26题双指针法代码80题双指针代码26题双指针法一个快指针i,一个慢指针j,当nums[j] == nums[i]时,慢指针j不变,快指针i继续向下走;而当nums[j] != nums[i]时,慢指针j要向前走一步,并且将nums[j]赋值为nums[i],再进行判断,直到i走到列表结尾代码class Solution(object): def removeDupli...原创 2019-07-11 15:55:38 · 84 阅读 · 2 评论 -
leetcode3. 无重复字符的最长子串
思路设置一个字典和一个初始的起始位置,遍历字符串中的每个字符,若是不在字典中,则用当前位置减去起始位置,并更新字典;若是在字典中,则要更新相应的起始位置,再进行长度计算。代码class Solution(object): def lengthOfLongestSubstring(self, s): if not s: return 0 ...原创 2019-07-11 16:42:35 · 104 阅读 · 1 评论 -
leetcode110. 平衡二叉树
思路计算树的高度,看每个节点的左子树和右子树的高度差是否超过1class Solution(object): def isBalanced(self, root): def height(root): if not root: return 0 if not root.left and n...原创 2019-07-17 22:00:08 · 69 阅读 · 0 评论 -
leetcode236. 二叉树的最近公共祖先
思路利用深度优先遍历DFS从根节点开始遍历树。如果当前节点本身是 p 或 q 中的一个,我们会将变量 mid 标记为 true,并继续搜索左右分支中的另一个节点。如果左分支或右分支中的任何一个返回 true,则表示在下面找到了两个节点中的一个。如果在遍历的任何点上,左、右或中三个标志中的任意两个变为 true,这意味着我们找到了节点 p 和 q 的最近公共祖先。代码class...原创 2019-07-17 00:06:14 · 114 阅读 · 1 评论 -
leetcode238. 除自身以外数组的乘积
思路从左到右遍历一趟,记录每个位置左边的乘积(首位为1)从右到左走一趟,将上一步的结果累乘每一位右边的乘积class Solution(object): def productExceptSelf(self, nums): if not nums: return [] output = [1] * len(nums) ...原创 2019-07-17 00:36:00 · 75 阅读 · 0 评论 -
Leetcode 279:完全平方数
思路四平方定理Lagrange 四平方定理: 任何一个正整数都可以表示成不超过四个整数的平方之和。四平方定理的重要推论:满足四数平方和定理的数n(这里要满足由四个数构成,小于四个不行),必定满足 n=4a(8b+7) n = 4a(8b + 7)根据这个重要的推论,我们可以非常迅速的写出这样的代码:我们首先将输入的n迅速缩小。然后我们再判断,这个缩小后的数是否可以通过两个平方...原创 2019-07-20 00:17:28 · 136 阅读 · 0 评论 -
leetcode283. 移动零
思路一暴力法,遍历一次,直接改class Solution(object): def moveZeroes(self, nums): nums[:] = list(filter(lambda x: x!=0,nums)) + list(filter(lambda x: x==0,nums)) if not nums: retur...原创 2019-07-20 01:27:04 · 97 阅读 · 1 评论 -
leetcode67. 二进制求和
思路一一行代码,将数字转为十进制,求和,再转回二进制class Solution: def addBinary(self, a: str, b: str) -> str: #int(x, base)将base进制的字符串x转化为十进制整数 #bin()将整数转化为二进制表示,注意开头是“0b”,所以取第二位之后的值 return ...原创 2019-07-01 09:31:45 · 88 阅读 · 0 评论 -
leetcode66. 加一
思路一将数组中的数字str后连接起来,变为整数+1,再还原为list一行代码class Solution: def plusOne(self, digits: List[int]) -> List[int]: return [int(x) for x in str(int(''.join(str(x) for x in digits)) + 1)]思路二...原创 2019-06-30 21:28:24 · 123 阅读 · 0 评论 -
leetcode65. 有效数字
思路一作弊法:利用try…except机制,直接判断是否可以通过float()函数class Solution: def isNumber(self, s: str) -> bool: try: float(s) return True except: return Fals...原创 2019-06-30 17:17:26 · 199 阅读 · 0 评论 -
leetcode234. 回文链表
文章目录方法一方法二方法一将链表元素加入到一个list中,然后比较list的正序和倒序是否相等class Solution(object): def isPalindrome(self, head): if not head: return True h = [] while head: ...原创 2019-07-08 08:35:22 · 79 阅读 · 0 评论 -
leetcode82、83删除排序链表中的重复元素
文章目录83题思路一思路二思路三82题思路一思路二先看83题,再看82题83题思路一可以利用pre,cur分别保存前一个节点和当前节点,遇到重复的就一直向下走,直到不重复,此时令pre.next指向curclass Solution: def deleteDuplicates(self, head: ListNode) -> ListNode: dummy...原创 2019-07-02 22:49:11 · 105 阅读 · 0 评论 -
leetcode114. 二叉树展开为链表
思路一把该树进行前序遍历,然后再连接起来class Solution: def flatten(self, root: TreeNode) -> None: """ Do not return anything, modify root in-place instead. """ res = []...原创 2019-07-02 23:18:29 · 81 阅读 · 1 评论 -
leetcode139. 单词拆分
先理解题意,字典中的每个单词可以重复使用,也可以不使用,直到能够拼出s思路动态规划第一种写法建立dp表,dp[0]置为True,那么dp[i]就表示s的前i-1个字符时是否完全能够通过字典中的元素拆分表示,是为True,不是为False动态方程为: dp[i]=True and s[i:j+1] in wordDict,dp[j]才为True即对于每一个i,检查从s的j = i+1位...原创 2019-07-03 22:30:22 · 198 阅读 · 0 评论 -
leetcode141、142. 环形链表
文章目录思路进阶:找到环的入口点思路快慢指针,慢的每次走一步,快的每次走两步,若能相遇说明该存在环class Solution(object): def hasCycle(self, head): """ :type head: ListNode :rtype: bool """ if not head...原创 2019-07-03 23:04:39 · 85 阅读 · 0 评论 -
leetcode152. 乘积最大子序列
思路因为会出现负值,所以单纯的用与连续最大子和一样的思路是不行的可以设置两个变量imax和imin,分别更新当前最大值和最小值,一旦遇到当前元素为负值时,就将上一轮得到的imax和imin交换,再更新imax和imin,同时每一步都更新res为最大值。class Solution(object): def maxProduct(self, nums): if not...原创 2019-07-09 22:48:17 · 101 阅读 · 0 评论 -
leetcode155. 最小栈
思路参见剑指offer31题创建一个辅助栈lmin,用于存放每次压入时的最小元素,即每当主栈压入元素时,比较本次压入元素与辅助栈最小元素的大小,如果当前元素小于辅助栈最小元素,则同时压入辅助栈,否则依旧将辅助栈中的最小元素再次压入辅助栈。但要注意第一次压入操作时,辅助栈为空,所以不管大小直接将该元素压入辅助栈(判断语句中体现该点)class MinStack(object): d...原创 2019-07-09 23:47:05 · 142 阅读 · 0 评论 -
leetcode124. 二叉树中的最大路径和、543.二叉树的直径
思路采用递归class Solution(object): def maxPathSum(self, root): """ :type root: TreeNode :rtype: int """ # if not root: # return 0 self.res...原创 2019-07-10 19:33:23 · 137 阅读 · 0 评论 -
leetcode287. 寻找重复数
思路一暴力解法:排序,然后遍历class Solution(object): def findDuplicate(self, nums): if not nums: return None nums.sort() for i in range(1,len(nums)): if nums[i...原创 2019-07-20 02:06:16 · 408 阅读 · 1 评论 -
leetcode101. 对称二叉树
递归与迭代迭代版本其实就是层次遍历,然后每一层都检查是否是回文结构class Solution(object): def isSymmetric(self, root): queue = [root] while queue: queue2 = [] layer = [] for ...原创 2019-07-29 19:38:30 · 75 阅读 · 0 评论 -
95、96. 不同的二叉搜索树
95题输出所有可能的搜索二叉树采用递归,不断地进行root和左右子节点的递归class Solution(object): def generateTrees(self, n): if n == 0: return [] def helper(start,end): res = [] ...原创 2019-07-29 21:29:59 · 125 阅读 · 0 评论 -
617. 合并二叉树
思路递归,以树1作为基准,如果两棵树的当前节点都存在,那么把树2的该节点加到数1,再递归的对树1、树2的左子树和右子树进行操作,并分别置为树1的左右子树;如果有一个树的当前节点不存在,则返回另一棵树的对应节点。class Solution(object): def mergeTrees(self, t1, t2): """ :type t1: Tree...原创 2019-08-17 20:05:23 · 93 阅读 · 0 评论 -
394. 字符串解码
思路利用辅助栈class Solution(object): def decodeString(self, s): """ :type s: str :rtype: str """ if not s: return '' num, res, stack = 0, ...原创 2019-08-18 08:59:12 · 108 阅读 · 0 评论 -
171. Excel表列序号
思路class Solution(object): def titleToNumber(self, s): """ :type s: str :rtype: int """ if not s: return None res = 0 for i ...原创 2019-08-27 11:59:18 · 183 阅读 · 0 评论 -
461. 汉明距离
思路做异或运算,然后统计1的个数class Solution(object): def hammingDistance(self, x, y): """ :type x: int :type y: int :rtype: int """ #异或运算,同位0,异位1 n = ...原创 2019-08-27 22:28:46 · 82 阅读 · 1 评论 -
300. 最长上升子序列
思路一:动态规划建立dp表,dp[i]表示含第i个数字的最长上升子序列的长度求dp[i]时,向前遍历找出比i元素小的元素j,则动态方程为dp[i] = max(dp[i],dp[j] + 1)class Solution(object): def lengthOfLIS(self, nums): size = len(nums) if size &l...原创 2019-09-01 10:16:17 · 81 阅读 · 0 评论 -
494. 目标和
思路:蛮有难度的一题问题转化为在nums中找到所有和为某一值的子集合p此时可以用动态规划解决dp[j] = dp[j - num] + dp[j](这里我不是很明白)class Solution(object): def findTargetSumWays(self, nums, S): count = 0 if sum(nums) < ...原创 2019-09-01 15:07:09 · 161 阅读 · 0 评论 -
121. 买卖股票的最佳时机
思路一记录每一个数之前的最小买入价格,计算当前数与最小买入价格的差(即今天卖出的利润),比较每天的利润,取最大。class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ ...原创 2019-09-01 23:20:39 · 109 阅读 · 1 评论 -
538. 把二叉搜索树转换为累加树
思路:按照规律,即为二叉树中序遍历的逆序,从右子树开始,一次把所有的节点累加,加到当前节点class Solution(object): def convertBST(self, root): self.num = 0 if not root: return None def DFS(root): ...原创 2019-08-15 23:07:42 · 87 阅读 · 0 评论 -
437. 路径总和 III
和112、113题类似不过这一题更难一些,需要进行双重递归:即对每个节点做递归,再以该节点为起点进行DFS,搜寻满足条件的路径class Solution(object): def __init__(self): self.count = 0 def pathSum(self, root, sum): if not root:...原创 2019-08-15 21:54:31 · 148 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
思路简单递归与前序和中序重建二叉树是一样的class Solution(object): def buildTree(self, inorder, postorder): #递终止条件 if not inorder and not postorder: return None root = TreeNode(pos...原创 2019-07-29 22:17:20 · 136 阅读 · 0 评论 -
leetcode100. 相同的树
思路使用递归。终止条件为以下3个:本轮要做的:满足终止条件则返回,不满足则判断左右子树是否相同代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None#...原创 2019-07-22 00:58:00 · 61 阅读 · 0 评论 -
leetcode347. 前 K 个高频元素
思路一:暴力法遍历list,利用dict计数,根据计数再排序,最后返回前k个代码class Solution(object): def topKFrequent(self, nums, k): d = {} if not nums or k <= 0: return [] for i in range(l...原创 2019-07-22 01:43:19 · 123 阅读 · 1 评论 -
leetcode108. 将有序数组转换为二叉搜索树
思路将数组中的中点作为根节点,然后递归的利用数组中点 左侧和右侧的数 分别建立左子树和右子树class Solution(object): def sortedArrayToBST(self, nums): if not nums: return None l, r = 0, len(nums) - 1 m =...原创 2019-07-30 22:51:37 · 83 阅读 · 0 评论 -
112、113. 路径总和
思路递归,终止条件为当左节点为空、右为空且sum减去当前节点的值为0是,才返回Trueclass Solution(object): def hasPathSum(self, root, sum): if not root: return False if root.left == None and root.right == ...原创 2019-07-31 07:37:56 · 117 阅读 · 0 评论 -
leetocde739. 每日温度
思路暴力法从左到右遍历每一位数字(除最后一位,直接为0),从他的下一位开始,寻找第一个比他大的数。时间复杂度为O(N2),超时。class Solution(object): def dailyTemperatures(self, T): while not T: return [] n = len(T) ...原创 2019-07-26 23:21:35 · 106 阅读 · 1 评论 -
129. 求根到叶子节点数字之和
思路采用递归三部曲class Solution(object): def sumNumbers(self, root): def helper(root, sum): #终止条件 if not root: return 0 #这一步要做什么 ...原创 2019-08-01 20:44:02 · 107 阅读 · 0 评论