python
JonassssRo
前奥林匹克首席云游泳大师。
展开
-
二叉树遍历非递归
preimport typingclass Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: if not root: return [] stack = [root] ans = [] while stack: cur = stack.pop() a原创 2022-03-03 14:52:42 · 303 阅读 · 0 评论 -
124. 二叉树中的最大路径和
124. 二叉树中的最大路径和import typingclass Solution: def __init__(self): self.ans = float('-inf') def maxPathSum(self, root) -> int: def helper(root): if not root: return 0 left = max(helper(root原创 2022-03-03 13:38:09 · 226 阅读 · 0 评论 -
买卖股票的最佳时机
买卖股票的最佳时机1class Solution: def maxProfit(self, prices: List[int]) -> int: dp = [[-1] * 2 for _ in range(len(prices))] dp[0][0] = 0 dp[0][1] = -prices[0] for i in range(1, len(prices)): dp[i][0] = max(dp[i-原创 2022-03-02 16:44:32 · 233 阅读 · 0 评论 -
56. 合并区间
56. 合并区间class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: ans = list() intervals.sort(key = lambda x : x[0]) start, end = intervals[0][0], intervals[0][1] for i in range(1,len(intervals)原创 2022-02-24 15:36:06 · 472 阅读 · 0 评论 -
刷题记录:241. 为运算表达式设计优先级
241. 为运算表达式设计优先级class Solution: def diffWaysToCompute(self, expression: str) -> List[int]: res = list() for idx, symbol in enumerate(expression): if symbol == '+' or symbol == '-' or symbol == '*': leftP原创 2022-02-23 19:59:40 · 70 阅读 · 0 评论 -
刷题记录:19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *p1 = head, *p2 = head; for(int i = 0; i < n; ++i){ p1 = p1->next; } if(p1 == nullptr){原创 2022-02-10 23:03:33 · 622 阅读 · 0 评论 -
刷题记录:752. 打开转盘锁
752. 打开转盘锁from queue import Queueclass Solution: def openLock(self, deadends: List[str], target: str) -> int: def turnUp(s, idx): if s[idx] == '9': s = s[:idx] + '0' + s[idx+1:] else:原创 2022-02-07 21:32:30 · 408 阅读 · 0 评论 -
刷题记录:5. 最长回文子串
5. 最长回文子串class Solution: def longestPalindrome(self, s: str) -> str: n = len(s) l, r = 0, 0 dp = [[False] * n for _ in range(n)] for i in range(n): dp[i][i] = True for j in range(1,n):原创 2022-02-03 14:44:54 · 461 阅读 · 0 评论 -
刷题记录:3. 无重复字符的最长子串
3. 无重复字符的最长子串class Solution: def lengthOfLongestSubstring(self, s: str) -> int: cur_str = set() cur, longest = 0, 0 l, r, n = 0, 0, len(s) while r < n: if s[r] not in cur_str: cur_str.原创 2022-02-03 14:14:20 · 344 阅读 · 0 评论 -
刷题记录:2. 两数相加
2. 两数相加# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: p原创 2022-02-03 13:41:44 · 445 阅读 · 0 评论 -
刷题记录:打家劫舍123
打家劫舍1打家劫舍2打家劫舍31class Solution: def rob(self, nums): n = len(nums) if n == 1: return nums[0] pre, nxt = nums[0], max(nums[0], nums[1]) for i in range(2, n): pre, nxt = nxt, max(pre + nums[i],原创 2022-02-01 02:41:19 · 388 阅读 · 0 评论 -
刷题记录:647. 回文子串
647. 回文子串class Solution: def countSubstrings(self, s: str) -> int: n = len(s) dp = [[False] * n for _ in range(n)] count = n for i in range(n): dp[i][i] = True for j in range(1,n):原创 2022-02-01 02:04:08 · 438 阅读 · 0 评论 -
刷题记录:1143. 最长公共子序列
1143. 最长公共子序列常规动态规划class Solution: def longestCommonSubsequence(self, text1: str, text2: str) -> int: n1, n2 = len(text1), len(text2) dp = [[0] * (n2 + 1) for _ in range(n1 + 1)] for i in range(1, n1 + 1): for原创 2022-01-30 23:28:23 · 694 阅读 · 0 评论 -
刷题记录:416. 分割等和子集
416. 分割等和子集class Solution: def canPartition(self, nums: List[int]) -> bool: target = sum(nums) / 2 if target != int(target): return False n = len(nums) target = int(target) dp = [[False]原创 2022-01-30 21:28:24 · 544 阅读 · 0 评论 -
刷题记录:322. 零钱兑换12
322. 零钱兑换很常规的动规class Solution: def coinChange(self, coins: List[int], amount: int) -> int: dp = [float('inf') for _ in range(amount + 1)] dp[0] = 0 # print(dp) for i in range(1,amount+1): for coin in coi原创 2022-01-30 12:15:12 · 363 阅读 · 0 评论 -
刷题记录:538. 把二叉搜索树转换为累加树
538. 把二叉搜索树转换为累加树# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def convertBST(self, root:原创 2022-01-27 16:53:34 · 280 阅读 · 0 评论 -
最小覆盖子串-滑动窗口
链接: 最小覆盖字串.from collections import defaultdictclass Solution: def minWindow(self, s: str, t: str) -> str: left,right = 0,0 minlen = float('INF') match = 0 start = 0 need = defaultdict(int) window = d原创 2021-03-08 16:50:49 · 102 阅读 · 0 评论 -
算法笔记(二)单调栈(1)最大矩形
单调栈也是算法题中常用的一种方法,这里总结一下思路先看一道题。链接: 84. 柱状图中最大的矩形.虽然题目的难度为hard,但是思路还是很好想到的,难点在于优化的部分。思路分析我们可以遍历每根柱子 i ,并且以当前柱子的高度 height[i] 作为此矩形 rectangle[i] 的高(假设矩形的高为竖直方向的,宽为水平方向)。对于此矩形的宽 width[i] ,我们可以以当前柱子为起始点,向左遍历每个柱子j,如果 height[j] > height[i] ,则 width[i] .原创 2020-12-26 20:30:19 · 245 阅读 · 0 评论 -
算法笔记(一)动态规划(3)按摩师
许多大厂的面试都会考动态规划,为了能过算法题这关,把自己做的题的思路总结一下,方便日后查阅。这次的题比之前两道题稍微有些变动。LeetCode 按摩师 simple直接先上代码看一下class Solution: def massage(self, nums: List[int]) -> int: lenght = len(nums) if not lenght: return 0 elif lenght =.原创 2020-12-21 16:51:35 · 285 阅读 · 2 评论 -
算法笔记(一)动态规划(2)最小花费爬楼梯
许多大厂的面试都会考动态规划,为了能过算法题这关,把自己做的题的思路总结一下,方便日后查阅。这里再写一个比较简单的动态规划的例子,也是今天Leetcode的每日一题。上一个例子的链接:链接: 算法笔记(一)动态规划(1).题目LeetCode 746 simple通过上一个例子已经大致了解了动态规划的套路。直接开整。定义数组由于要依次从头开始计算最小的体力花费,则定义dp[i]为从头开始到达并跨越第i个台阶所需要的体力。状态转移方程对于第i个阶梯,都可以由i-1花费COST[.原创 2020-12-21 11:38:48 · 451 阅读 · 1 评论 -
Python-split()函数用法及简单实现
split函数用法split(sep=None, maxsplit=-1)str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。num – 分割次数。默认为 -1, 即分隔所有。// 例子String = 'Hello world! Nice to meet you'String.split()['Hello', 'world!', 'Nice', 'to', 'meet', 'you']String.split(' ', 3)['Hello', 'w原创 2020-12-16 12:29:30 · 1405 阅读 · 1 评论