leetcode
文章平均质量分 59
我会像蜗牛一样努力
自己选择的路,跪着也要走完。既然选择,那么风雨兼程吧!愿未来三年不负韶华,不负卿。
展开
-
Leetcode--------回溯法
回溯法模板:回溯三部曲:回溯函数模板返回值以及参数,习惯是函数起名字为backtracking 回溯函数终止条件if (终止条件) { 存放结果; return;}回溯搜索的遍历过程总结:void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点;原创 2021-08-05 18:01:10 · 314 阅读 · 0 评论 -
Leetcode--------二叉树Part2
226. 翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1代码:class Solution: def invertTree(self, root: TreeNode) -> TreeNode: """ 采用递归的方法原创 2021-08-01 10:09:43 · 140 阅读 · 0 评论 -
Leetcode--------二叉树Part1
二叉树的定义:class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None144. 二叉树的前序遍历代码:# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None,原创 2021-07-30 17:42:07 · 201 阅读 · 0 评论 -
Leetcode--------字符串
344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a",原创 2021-07-27 18:15:42 · 165 阅读 · 0 评论 -
Leetcode27. 移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数...原创 2021-07-18 15:00:58 · 94 阅读 · 0 评论 -
Leetcode--------哈希表
代码:class Solution: def isAnagram(self, s: str, t: str) -> bool: record = [0]*26 for word_one in s: #获取一个字母的相对于字符"a"的ascii码 record[ord(word_one)-ord("a")] += 1 for word_two in t: #同理 ..原创 2021-07-13 16:45:21 · 151 阅读 · 0 评论 -
Leetcode142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用O(1)空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点...原创 2021-07-07 14:36:59 · 124 阅读 · 0 评论 -
Leetcode面试题 02.07. 链表相交
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为..原创 2021-07-07 13:40:55 · 180 阅读 · 2 评论 -
Leetcode19. 删除链表的倒数第N个节点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <=...原创 2021-07-06 09:58:00 · 135 阅读 · 0 评论 -
Leetcode24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]解决方法:定义2个指针(头指针front,尾指针tail),这2个指针进行节点的互换,循环时,若尾部指针还能向后移动2个位置,就一直交换下去。还要定义一个临时指针,若前面进.原创 2021-07-05 21:37:08 · 169 阅读 · 1 评论 -
Leetcode206. 反转链表
给你单链表的头节点head,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]解法:代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution...原创 2021-07-04 19:52:58 · 133 阅读 · 0 评论 -
Leetcode707. 设计链表
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性prev以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为val的节点。插入后,新节点将成...原创 2021-07-04 19:29:23 · 115 阅读 · 0 评论 -
Leetcode203. 移除链表元素
给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]输入:head = [], val = 1输出:[]# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=...原创 2021-07-04 15:50:09 · 191 阅读 · 0 评论 -
Leetcode96. 不同的二叉搜索树(动态规划)
给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?解题思路:首先我们要明白何为二叉搜索树,所谓二叉搜索树是一个有序树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树 当1为头结点的时候,其右子树有两个节点,看这两个节点的布局,是不是和 n 为2的时候两棵树的布局是一样的啊!当3为头结点的时候,其左子树有两个节点,看...转载 2021-04-06 09:36:35 · 127 阅读 · 0 评论 -
Leetcode63. 不同路径 II(动态规划)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?解释:这道题是第62道题的升级版,传统动态规划的问题,使用动态数组求解;不同的是,上一步的位置可以是障碍,这要考虑到。代码:class Solution(object): def uniquePathsWith..原创 2021-04-04 21:47:49 · 157 阅读 · 0 评论 -
Leetcode62. 不同路径(动态规划)
一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?1 <= m, n <= 100 题目数据保证答案小于等于2 * 109解释:这道题没什么好说的啊,传统动态规划的问题,使用动态数组求解,简而言之,当前位置可能有2中位置走一步过来,分别是正上方,正左方,了解这个点,那么这道题便很简单就求解...原创 2021-04-04 20:40:53 · 132 阅读 · 0 评论 -
Leetcode357. 计算各个位数不同的数字个数(动态规划)
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x <。示例:输入: 2输出: 91解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。解题思路:这是一道动态规划题目,按照题目的意思,我们首先要知道的是:当输入是0时,输出是1;当输入是1时,输出是10;我们是使用dp[n]表示当输入n时,输出是dp[n],即位于【0 ,】之间,个数数字都不同的数字有多少个。dp递推公式的推...原创 2021-04-02 20:43:50 · 451 阅读 · 0 评论 -
Leetcode343. 整数拆分(动态规划)
给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。说明: 你可以假设n不小于 2 且不大于 58。解题思路:这道题同样是一道动态规划问题,遍历整数n的拆分成2大块,即(1)前面一块再细拆分了,用dp[]表示(2)前一块没有细拆分...原创 2021-03-25 10:20:01 · 301 阅读 · 0 评论 -
Leetcode300. 最长递增子序列(动态规划)
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,..原创 2021-03-24 10:33:17 · 148 阅读 · 0 评论 -
Leetcode474. 一和零(动态规划-01背包问题)
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。其他满.原创 2021-03-10 20:30:45 · 225 阅读 · 0 评论 -
Leetcode1043. 分隔数组以得到最大和
给你一个整数数组 arr,请你将该数组分隔为长度最多为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。返回将数组分隔变换后能够得到的元素最大和。注意,原数组和分隔后的数组对应顺序应当一致,也就是说,你只能选择分隔数组的位置而不能调整数组中的顺序。示例 1:输入:arr = [1,15,7,9,2,5,10], k = 3输出:84解释:因为 k=3 可以分隔成 [1,15,7] [9] [2,5,10],结果为 [15,15,15,9,10,.原创 2021-03-03 20:56:07 · 271 阅读 · 2 评论 -
leetcode刷题(面试题 16.17)
给定一个整数数组,找出总和最大的连续数列,并返回总和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解法一:动态规划思想:dp[i]代表dp[0:i]最大的连续数列和,求dp[i]我们有两种情况,要么选择nums[i] + dp[i-1], 要么直接选择nums[i];而max_value 记录着遍历过的子序列最大值。即状态转移方程:dp[i] = max(dp[i-1] + nums[i],原创 2020-07-26 22:26:33 · 513 阅读 · 0 评论 -
leetcode刷题(746题)
746. 使用最小花费爬楼梯数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:...转载 2020-07-24 23:05:51 · 339 阅读 · 0 评论 -
leetcode刷题(1018题)
题目:给定由若干0和1组成的数组 A。我们定义N_i:从A[0] 到A[i]的第 i个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表answer,只有当N_i可以被 5整除时,答案answer[i] 为true,否则为 false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为...原创 2020-07-22 21:02:46 · 323 阅读 · 0 评论 -
Leetcode--------数组(二分法)在排序数组中查找数字
统计一个数字在排序数组中出现的次数()。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000思路一:这个思路也是最容易想到的,从左边开始遍历找到第一个出现的,位置用表示;从右开始遍历找到第一个出现的,位置用表示,那么在排序数组中出现的次数为。这种方法的时间复杂度O(...原创 2020-07-16 23:31:12 · 342 阅读 · 1 评论