LeetCode
LeetCode编程题
rosefunR
每次都多付出一点. 欢迎关注公众号《机器学习与算法之道》
展开
-
LeetCode3.无重复字符的最长子串
1. 题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列原创 2020-09-20 22:36:02 · 201 阅读 · 0 评论 -
面试题:终极杀器BFS解决动态规划问题
1. BFS和动态规划BFS,Breadth-First Search, 广度优先搜索,用于解决图遍历的算法,简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。具体可以参看:图:广度优先遍历BFS和深度优先遍历DFS及python实现动态规划,通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。具体参看动态规划算法BFS和动态规划的联系动态规划需要找出状态转移矩阵,有的时候状态转移方程很多找,比如背包问题的一些拓展题。与动原创 2020-10-18 15:13:57 · 715 阅读 · 0 评论 -
Leetcode144. 二叉树的前序遍历(迭代,递归python实现)
1. 题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 递归递归的方法比较简单,前原创 2020-10-13 15:50:33 · 291 阅读 · 0 评论 -
面试题:最长公共子序列LCS的所有花样(求公共最长长度,输出对应的子序列)
1. 求最长公共子串的长度对于输入两个字符串 X, Y, 最长公共子序列(Longest Common Subsequence)中子序列只需保持相对顺序,并不要求连续。首先,这是一个经典的动态规划题,记 dp[i][j]dp[i][j]dp[i][j] 是字符串1 XXX 从0到索引 iii 和字符串2 Y从 0 到索引 jjj 的最长公共子串的长度。dp[i,j]={dp[i−1,j−1]+1 if x[i]=y[j]max{dp[i,j−1],dp[i−1,j]} 原创 2020-10-12 23:39:33 · 432 阅读 · 0 评论 -
LeetCode410. 分割数组的最大值(python,二分法)
1. 题目给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。原创 2020-09-30 15:04:20 · 500 阅读 · 0 评论 -
LeetCode面试题 17.01. 不用加号的加法
1. 题目设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-without-plus-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 题解Javaclass Solution { public static原创 2020-09-24 11:35:25 · 307 阅读 · 0 评论 -
LeetCode283. 移动零
1. 题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 题解这题关键是复杂度降下来,这里给出 O(原创 2020-09-20 16:43:14 · 112 阅读 · 0 评论 -
字符串字符全组合(python)
1. 相邻字符的组合输入一个字符串,输出该字符串中相邻字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、bc、abc。(注意:输出的组合需要去重)输入描述:一个字符串输出描述:一行,每个组合以空格分隔,相同长度的组合需要以字典序排序,且去重。示例1输入bac输出a b c ac ba bac链接:https://www.nowcoder.com/questionTerminal/837f4d04f5cb4f26a8215b2b95cc76a5来源:牛客网原创 2020-09-20 12:32:20 · 4273 阅读 · 2 评论 -
LeetCode120. 三角形最小路径和(python)
1. 问题给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。来源:原创 2020-09-20 11:05:17 · 391 阅读 · 0 评论 -
LeetCode剑指 Offer 47. 礼物的最大价值
1. 题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物来源:力扣(LeetCode)链接:https://leetcode-cn.com原创 2020-09-19 22:14:06 · 241 阅读 · 0 评论 -
LeetCode32. 最长有效括号
1. 题目给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.原创 2020-09-17 11:08:08 · 145 阅读 · 0 评论 -
LeetCode470. 由1-7的随机整数函数构造1-10随机整数函数
https://blog.csdn.net/ljsspace/article/details/6820753原创 2020-09-16 09:46:31 · 340 阅读 · 0 评论 -
一个数最少能由几个完全平方数的和组成(动态规划)
用 dp[n] 代表n用完全平方数的和组成的最少个数。import mathdef is_sqrt(n): sqrt=math.sqrt(n) return sqrt-int(sqrt)==0def get_res(n): dp=[1]+[0]*n if(is_sqrt(n)):return 1 for i in range(1,n+1): if(is_sqrt(i)): dp[i]=1 con原创 2020-09-15 22:27:24 · 2245 阅读 · 0 评论 -
P2661 信息传递(并查集,python)
1. 题目原题2. 题解并查集找最小环。使用 path_count 来计算节点和父亲节点的距离。#!/usr/bin/env python# encoding=utf-8def init_parents(N): parents = {} path_count = {} for i in range(N): parents[i+1] = i+1 path_count[i+1] = 0 return parents, path_co原创 2020-09-12 15:44:10 · 258 阅读 · 0 评论 -
LeetCode300. 最长上升子序列(python)
1. 题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longes原创 2020-09-07 08:41:15 · 503 阅读 · 0 评论 -
LeetCode1319. 连通网络的操作次数(python,并查集)
1. 题目用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回 -1 。示例 1:原创 2020-09-04 22:47:03 · 299 阅读 · 1 评论 -
LeetCode684. 冗余连接(并查集,python)
1. 题目在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u <原创 2020-09-04 16:28:09 · 393 阅读 · 0 评论 -
LeetCode257. 二叉树的所有路径(python)
1. 题目给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-paths著作权归领扣网络所有。商业转载请联系官方原创 2020-09-04 10:48:03 · 390 阅读 · 0 评论 -
LeetCode44. 通配符匹配(python,动态规划) 通用解法
1. 题目给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/wildcard-matching著作权归领扣网络所有。原创 2020-07-05 17:37:03 · 705 阅读 · 0 评论 -
LeetCode718. 最长重复子数组(python)
1. 问题给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-length-of原创 2020-07-01 01:14:55 · 720 阅读 · 0 评论 -
Leetcode680. 验证回文字符串 Ⅱ(python,递归)
1. 题目给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-palindrome-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 题解递归,用k记录删除元素的个数;由于k最大原创 2020-05-19 10:47:17 · 414 阅读 · 0 评论 -
LeetCode560. 和为K的子数组
1. 题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subarray-sum-eq原创 2020-05-15 08:40:51 · 267 阅读 · 0 评论 -
字符串的全排列python实现
1. 题目给定一个字符串,找出有该字符串所有字符排列组成的所有字符串。2. 方法迭代,遍历字符串,取遍历的字符当作首字符,对剩下的字符组成的字符串再次进行全排列操作。注意:有可能出现相同字符的情况,用visited来记录首位置出现过的字符。###def quan_pailie(s,res=[]): if not s: return [] elif len(s) == 1: return [s[0]] res = [] visite原创 2020-05-09 17:13:23 · 1715 阅读 · 0 评论 -
LeetCode69. x 的平方根(python,泰勒展开)
1. 题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sqrtx著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 题解可原创 2020-05-09 08:10:19 · 1356 阅读 · 0 评论 -
LeetCode530. 二叉搜索树的最小绝对差(python,中序遍历)
1. 题目给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-abso...原创 2020-05-07 20:56:04 · 369 阅读 · 0 评论 -
LeetCode面试题 04.04. 检查平衡性(python,递归)
1. 题目实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/...原创 2020-05-07 20:14:35 · 427 阅读 · 0 评论 -
LeetCode983. 最低票价(python,动态规划)
1. 题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的旅...原创 2020-05-06 08:19:05 · 521 阅读 · 0 评论 -
LeetCode面试题40. 最小的k个数(python,快速排序)
1. 题目输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000来源:力...原创 2020-05-05 20:35:24 · 516 阅读 · 0 评论 -
LeetCode739. 每日温度(python, 栈)
1. 题目根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]提示:气温 列表长度的范围是 [1, 30000...原创 2020-05-01 11:06:15 · 628 阅读 · 0 评论 -
有1, 2, 3 分3种硬币,得到n分的硬币方法(暴力法,动态规划)
1. 问题有1, 2, 3 分3种硬币,得到n分的硬币方法。2. 解答方法一:转换成方程x+2y+3z=nx + 2y + 3z = nx+2y+3z=n解的个数,遍历搜索空间。def get_n(n): # x + 2y + 3z = n # 多少解 # x 0,n # y 0, n//2 # z 0 n//3 res = 0 f...原创 2020-10-24 09:57:59 · 1254 阅读 · 0 评论 -
LeetCode33. 搜索旋转排序数组(二分法,python)
1. 题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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]...原创 2020-04-27 10:02:03 · 250 阅读 · 0 评论 -
LeetCode23. 合并K个排序链表
1. 题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/...原创 2020-04-26 10:14:26 · 156 阅读 · 0 评论 -
LeetCode2. 小张刷题计划
1. 题目为了提高自己的代码能力,小张制定了 LeetCode 刷题计划,他选中了 LeetCode 题库中的 n 道题,编号从 0 到 n-1,并计划在 m 天内按照题目编号顺序刷完所有的题目(注意,小张不能用多天完成同一题)。在小张刷题计划中,小张需要用 time[i] 的时间完成编号 i 的题目。此外,小张还可以使用场外求助功能,通过询问他的好朋友小杨题目的解法,可以省去该题的做题时间。...原创 2020-04-25 22:03:28 · 746 阅读 · 0 评论 -
LeetCode874. 模拟行走机器人(python,普通遍历题)
1. 题目机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:-2:向左转 90 度-1:向右转 90 度1 <= x <= 9:向前移动 x 个单位长度在网格上有一些格子被视为障碍物。第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1])机器人无法走到障碍物上,它将...原创 2020-04-23 13:10:36 · 864 阅读 · 0 评论 -
LeetCode 面试题63. 股票的最大利润
1. 题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。来源:力扣(LeetCo...原创 2020-04-21 18:01:48 · 533 阅读 · 0 评论 -
LeetCode面试题42. 连续子数组的最大和
1. 题目输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= ar...原创 2020-04-21 16:35:22 · 251 阅读 · 1 评论 -
LeetCode面试题 08.01. 三步问题(简单,动态规划,python)
1. 题目三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1: 输入:n = 3 输出:4 说明: 有四种走法来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/three-steps-problem-...原创 2020-04-21 16:25:46 · 446 阅读 · 0 评论 -
LeetCode面试题 17.16. 按摩师(python,动态规划)
1. 题目一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。注意:本题相对原题稍作改动示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。来源:力扣(Le...原创 2020-04-21 16:08:58 · 534 阅读 · 0 评论 -
LeetCode375. 猜数字大小 II(python,动态规划)
1. 题目我们正在玩一个猜数游戏,游戏规则如下:我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。示例:n = 10, 我选择了8.第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需...原创 2020-04-21 15:19:29 · 477 阅读 · 0 评论 -
LeetCode743. 网络延迟时间(python,bfs)
1. 题目有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。现在,我们从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。示例:输入:times = [[2,1,1]...原创 2020-04-21 11:32:20 · 640 阅读 · 0 评论