数据结构与算法
ywangjiyl
这个作者很懒,什么都没留下…
展开
-
LeetCode 翻转字符串里的单词 python3
给定一个字符串,逐个翻转字符串中的每个单词。说明:无空格字符构成一个 单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。示例 1:输入:"the sky is blue"输出:"blue is sky the"示例 2:输入:" hello world! "输出:"world! hello"解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入:原创 2020-10-14 11:39:14 · 149 阅读 · 0 评论 -
LeetCode 字符串相乘 python3
描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例输入: num1 = "123", num2 = "456"输出: "56088"class Solution: def multiply(self, num1: str, num2: str) -> str: if num1 == "0" or num2 == "0": return '0'原创 2020-10-14 11:02:20 · 351 阅读 · 0 评论 -
leetcode 字符串的排列 python3
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba"). 示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False 注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间1 初始化滑动窗口,其长度为s1的长度原创 2020-10-13 18:44:47 · 170 阅读 · 0 评论 -
leetcode 任务调度器 python3
给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的最短时间。示例 :输入:tasks = ["A","A","A","B","B","转载 2020-10-12 16:39:30 · 281 阅读 · 0 评论 -
leetcode 多数元素 python3
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2nums = [3,2,3]l = len(nums)x = 0chongfu = []nums2 = set(nums)for i in nums2: for j in nums: if j原创 2020-10-11 10:41:21 · 145 阅读 · 0 评论 -
LeetCode 逆波兰表达式求值 python3
根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入: ["4", "13", "5", "/", "+"]输出: 6解原创 2020-10-11 10:09:19 · 181 阅读 · 0 评论 -
leetcode 分数到小数 python
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。示例 1:输入: numerator = 1, denominator = 2输出: "0.5"示例 2:输入: numerator = 2, denominator = 1输出: "2"示例 3:输入: numerator = 2, denominator = 3输出: "0.(6)"使用divmod获取商和余数. 然后转载 2020-10-09 10:51:07 · 263 阅读 · 0 评论 -
leetcode 两数相除 python3
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333..) = truncate(3原创 2020-10-07 15:50:17 · 312 阅读 · 0 评论 -
leetcode x 的平方根 python3
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。class Solution: def mySqrt(self, x: int) -> int: low = 0 high = x原创 2020-09-27 16:00:43 · 186 阅读 · 0 评论 -
Leetcode Excel表列序号 python3
给定一个Excel表格中的列名称,返回其相应的列序号。例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例 1:输入: "A"输出: 1示例 2:输入: "AB"输出: 28示例 3:输入: "ZY"输出: 701class Solution: def titleToNumber(self, s: st原创 2020-09-25 09:53:00 · 187 阅读 · 0 评论 -
leetcode 阶乘后的零 python3
给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) https://leetcode-cn.com/problems/factorial-trailing-zeroes/solution/jie-cheng-hou-de-ling-by-leetcode/class Solution:原创 2020-09-24 16:48:10 · 109 阅读 · 0 评论 -
LeetCode 常数时间插入、删除和获取随机元素 python3
设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。remove(val):元素 val 存在时,从集合中移除该项。getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。示例 :// 初始化一个空的集合。RandomizedSet randomSet = new RandomizedSet();// 向集合中插入 1 。返回 true 表示 1 被成功地插入。randomSet.i转载 2020-09-22 19:47:32 · 115 阅读 · 0 评论 -
LeetCode 二叉树的序列化与反序列化 python3
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串。需要注意的是,序列化二叉树的过程中,如果遇到空节点,需要以某种符号(这里用#)表示转载 2020-09-22 10:08:55 · 173 阅读 · 0 评论 -
动态规划 零钱兑换-最长上升子序列
这个算法一直不太会,再加上现在最近考试和项目比较多,所以就耽搁下来了,现在来梳理一下1.找出最优解性质,并刻化其结构特征(最优子结构)2.递归定义最优值3.以自底向上方式计算最优值4.根据计算最优值时信息,构造最优解看看这个就入门了输入格式:5 //表示三角形的行数 接下来输入三角形73 88 1 02 7 4 44 5 2 6 5要求输出最大和接下来,我们来分析一下解题思路:首先,肯定得用二维数组来存放原创 2020-09-20 09:44:13 · 97 阅读 · 0 评论 -
leetcode 不同路径 python3
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 -> 向右示例 2:输入: m =原创 2020-09-07 10:19:29 · 115 阅读 · 0 评论 -
leetcode 跳跃游戏 python3
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。思路:尽可能到达原创 2020-09-06 16:45:23 · 351 阅读 · 0 评论 -
leetcode 搜索二维矩阵 II python3
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 t原创 2020-09-03 14:57:03 · 121 阅读 · 0 评论 -
leetcode 搜索旋转排序数组 python3
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], target原创 2020-09-02 19:47:27 · 119 阅读 · 0 评论 -
letcode 合并区间 python3
给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。class Solution: def merge(self,原创 2020-09-01 15:38:43 · 97 阅读 · 0 评论 -
leetcode 寻找峰值 python3
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5 解释: 你的函数可以返回索引原创 2020-08-31 10:02:25 · 193 阅读 · 0 评论 -
leetcode 数组中的第K个最大元素 python3
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。class Solution: def findKthLargest(self, nums: List[int], k: int) -&g原创 2020-08-31 09:26:53 · 93 阅读 · 0 评论 -
leetcode 前 K 个高频元素 python3
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。from原创 2020-08-30 15:08:01 · 265 阅读 · 0 评论 -
leetcode 颜色分类 python3
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用常数空间的一趟扫原创 2020-08-29 13:15:45 · 129 阅读 · 0 评论 -
leetcode 单词搜索 python3
给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 fa原创 2020-08-28 18:51:37 · 178 阅读 · 0 评论 -
leetcode 子集 python3
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]迭代class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: res = [[]]原创 2020-08-27 15:28:20 · 136 阅读 · 0 评论 -
leetcode 全排列 python3
给定一个 没有重复 数字的序列,返回其所有可能的全排列。输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路 2:直接使用递归class Solution: def permute(self, nums: List[int]) -> List[List[int]]: res = [] def backtrack(nums,tmp):原创 2020-08-26 14:39:11 · 182 阅读 · 0 评论 -
leetcode 括号生成 python3
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。1.暴力求解2. DFS回溯1.暴力求解,把所有位置上的排序都列出来,然后取判断是否有效class Solution: def generateParenthesis(self, n: int) -> List[str]: def generate(A): if len(A) == 2*n : if vailld(A):原创 2020-08-25 16:18:45 · 233 阅读 · 0 评论 -
leetcode 电话号码的字母组合 python3
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。class Solution: def letterCombinations(self, digits: str) -> List[st原创 2020-08-24 10:58:36 · 253 阅读 · 0 评论 -
leetcode 岛屿数量 python3
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。class Solution: def depthSearch(self,grid,i,j): if i < 0 or j < 0 or i >= len(grid) or j >= len(grid[0]): return原创 2020-08-23 20:36:06 · 211 阅读 · 0 评论 -
leetcode 二叉搜索树中第K小的元素 python3
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 /原创 2020-08-10 18:40:00 · 115 阅读 · 0 评论 -
leetcode 填充每个节点的下一个右侧节点指针 python3
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。输入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left"原创 2020-08-10 17:46:34 · 104 阅读 · 0 评论 -
leetcode 从前序与中序遍历序列构造二叉树 python3
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# sel原创 2020-08-09 18:23:57 · 220 阅读 · 2 评论 -
leetcode 二叉树的锯齿形层次遍历 python3
二叉树的锯齿形层次遍历给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]正常的二叉树层次遍历+对输出进行处理# Definition for a binary tree node.# clas原创 2020-08-09 17:07:58 · 128 阅读 · 0 评论 -
leetcode 二叉树的中序遍历 python3
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: lst = [] if root: lst+=self.inorderTra原创 2020-08-07 18:31:17 · 92 阅读 · 0 评论 -
leetcode 相交链表 python3
方案一:将两个链表分别转换为两个列表,从列表的尾部开始对比两个列表的节点是否相等,并进行相应操作# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def getIntersectionNode(self, headA: ListNode, hea..原创 2020-08-06 16:18:14 · 169 阅读 · 0 评论 -
leetcode 奇偶链表 python3
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6->4原创 2020-08-05 19:04:52 · 187 阅读 · 0 评论 -
leetcode 两数相加 python3
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807所以我们只需要从个位开始, 逐位相加就好,但要注意进位问题, 对原创 2020-08-04 18:20:31 · 208 阅读 · 1 评论 -
leetcode 递增的三元子序列 python3
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入: [1,2,3,4,5]输出: true示例 2:输入: [5,4,3,2,1]输出: false解题思原创 2020-08-03 20:09:14 · 214 阅读 · 0 评论 -
leetcode 最长回文子串 python3
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"方案一: 超时class Solution: def longestPalindrome(self, s: str) -> str: newtarget = [] max_len = len(s)-1 i原创 2020-08-01 18:46:46 · 137 阅读 · 0 评论 -
leetcode 无重复字符的最长子串 python3
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。给原创 2020-07-30 17:48:08 · 132 阅读 · 0 评论