自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 [LeetCode]202. 快乐数

题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + ...

2020-04-30 13:13:41 52

原创 [LeetCode]1095. 山脉数组中查找目标值

题目(这是一个 交互式问题 )给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。如果不存在这样的下标 index,就请返回 -1。何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:首先,A.length >= 3其次,在 0 < i < A.le...

2020-04-29 14:39:23 45

原创 [LeetCode](面试题56 - I)数组中数字出现的次数

题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums <=...

2020-04-28 23:14:46 31

原创 [LeetCode]33. 搜索旋转排序数组

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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], t...

2020-04-28 14:14:24 34

原创 [LeetCode]23. 合并K个排序链表
原力计划

题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6解题思路解法一:暴力法1、创建一个数组,用来存储链表中的值。遍历每个链表,将元素添加到数组中,之后再对数组排...

2020-04-28 14:11:20 43

原创 [LeetCode]46. 全排列

题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路回溯算法基本框架result = []def backtrack(路径, 选择列表): if 满足结束条件: resu...

2020-04-26 23:12:09 141

原创 [LeetCode](面试题51)数组中的逆序对

题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000解题思路利用归并排序算法,在合并两个子序列的时候统计逆序对个数。复杂度分析:时间复杂度:O(NlogN),这里 N 是数组的长度。复杂度是归并排序的...

2020-04-26 23:10:18 26

原创 [LeetCode](面试题 08.11)硬币

题目硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1: 输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2: 输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1...

2020-04-26 23:07:06 38

原创 [LeetCode]199. 二叉树的右视图
原力计划

题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---解题思路解法一:广度优先...

2020-04-23 01:21:12 80

原创 [LeetCode]138. 复制带随机指针的链表

题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为...

2020-04-21 21:32:28 30

原创 [LeetCode](面试题35)复杂链表的复制

题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2...

2020-04-21 20:48:29 40

原创 [LeetCode]1248. 统计「优美子数组」

题目给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。示例 1:输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。示例 2:输入:nums = [2,4,6], k =...

2020-04-21 13:23:20 33

原创 [LeetCode]200. 岛屿数量

题目给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3解释: 每座岛屿只...

2020-04-20 14:47:23 33

原创 [LeetCode]11. 盛最多水的容器

题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示...

2020-04-18 13:34:51 39

原创 [LeetCode]55. 跳跃游戏

题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你...

2020-04-17 22:25:16 41

原创 [LeetCode]56. 合并区间

题目给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。解...

2020-04-16 22:57:43 38

原创 [LeetCode]542. 01 矩阵

题目给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。...

2020-04-15 13:35:05 39

原创 [LeetCode]445. 两数相加 II

题目给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7...

2020-04-14 23:02:46 38

原创 [LeetCode]287. 寻找重复数

解题思路根据抽屉原理,采用二分查找法。例如 [1,2,2,3,4,5,6,7] 一共8个数,数字范围1到7,其中位数为4,遍历整个数组,统计小于等于 4 的整数的个数,至多应该为 4 个。换句话说,整个数组里小于等于 4 的整数的个数如果严格大于 4 个,就说明重复的数存在于区间 [1, 4],它的反面是:重复的数存在于区间 [5, 7]。代码class Solution: def...

2020-04-12 18:32:14 32

原创 [LeetCode]151. 翻转字符串里的单词

解题思路解法一:调用内置API1)使用 split 将字符串按空格分割成字符串数组;2)使用 reverse 将字符串数组进行反转;3)使用 join 方法将字符串数组拼成一个字符串。复杂度分析:时间复杂度:O(N),其中 N 为输入字符串的长度。空间复杂度:O(N),用来存储字符串分割之后的结果。解法二:自行编写函数实现(双指针法)主要思路是:1)倒序遍历字符串 s ,记录单...

2020-04-10 23:20:03 26

原创 [LeetCode]22. 括号生成

解题思路解法一:dfs回溯回溯法是一个剪枝了的二叉树。第一,它最多能添加 n 个左括号,在递归调用的时候,在能传递到最底层的共用字符串中先添加 ‘(’ ,然后 left-1,再递归调用。第二,当左括号个数大于右括号的个数时添加右括号。总之,向下搜索要满足两个条件:1) 插入数量不超过n,可以插入’)’ 的前提是’(‘的数量大于’)’。解法二:动态规划1)定义状态dp[i],表示i对括号可...

2020-04-09 22:05:33 25

原创 [LeetCode](面试题13)机器人的运动范围

解题思路讲几个注意点:1、如何计算一个数的数位之和?只需要对数 num 每次对 10 取余,就能知道数 num 的个位数是多少,然后再将 num 除 10,这个操作等价于将 num 的十进制数向右移一位,删除个位数(类似于二进制中的 >> 右移运算符),不断重复直到 num 为 0 时结束。2、缩小搜索方向,本题不必向四个方向都进行搜索,其实只用向下或者向右就可以了。3、在BF...

2020-04-08 22:50:13 22

原创 [LeetCode](面试题 01.07)旋转矩阵

解题思路解法一:使用辅助数组先将原数组复制到这个新数组中,再根据这个新复制的数组对原数组修改。复杂度分析:时间复杂度:O(N^2),其中 N 是 matrix 的边长。空间复杂度:O(N^2),我们需要使用一个和 matrix 的大小相同的辅助数组。解法二:原地翻转例如A = [[1,2,3], [4,5,6], [7,8,9]]要得到A1 = [[7,4...

2020-04-07 13:00:06 72

原创 Python创建二维数组

1、直接法:A = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]2、间接法:第一种A = [[0 for i in range(n)] for j in range(m)]第二种A = [[0] * n for j in range(m)]间接法中的两种都是可以创建一个 m * n 的二维数组的,但需要注意的是,不能用这种方式创建:A' = [[0] *...

2020-04-06 16:47:12 97

原创 [LeetCode]72. 编辑距离

解题思路设 dp[i][j] 表示word1的前 i 个字母与word2的前 j 个字母之间的编辑距离,考虑以下几种情况:1)如果 word1[i] == word2[j],那么无需进行任何操作,即 dp[i][j] = dp[i-1][j-1];2)如果 word1[i] != word2[j],分三种情况:2.1)dp[i-1][j]表示word1的前 i-1 个字母与word2的前 ...

2020-04-06 16:32:02 22

原创 [LeetCode](面试题 17.21)直方图的水量

解题思路具体思路可参考 42. 接雨水代码解法一:动态规划class Solution: def trap(self, height: List[int]) -> int: n = len(height) if n == 0: return 0 leftmax = [0]*n rightm...

2020-04-05 13:48:16 48

原创 [LeetCode]42. 接雨水
原力计划

解题思路这题有点类似木桶效应,一个木桶的盛水量是由最低的那块板子决定的。可以把每个柱子分别想成一个木桶,那么每个柱子高度方向的盛水量则是由从当前柱子向左看的最高柱子高度与从当前柱子向右看的最高柱子高度中的较低一方以及柱子本身高度决定的。形式化地表达第i个柱子的盛水量为 water[i] = min(leftmax[i], rightmax[i]) - height[i],解法一:暴力(超时)...

2020-04-05 13:46:37 64

原创 [LeetCode]8. 字符串转换整数 (atoi)
原力计划

解题思路解法一:正则表达式^:匹配字符串开头[\+\-]:代表一个+字符或-字符?:前面一个字符可有可无\d:一个数字+:前面一个字符的一个或多个\D:一个非数字字符*:前面一个字符的0个或多个解法二:常规判断需要注意的两个点:1)在转化过程中防止超过 INT_MAX(或INT_MIN),其中 INT_MAX = 2147483647;INT_MIN = -2147483...

2020-04-04 14:06:03 37

原创 [LeetCode]289. 生命游戏

解题思路解法一:创建新数组先将原数组A复制到一个新的数组B中,然后按照题意规则,遍历数组B,并在A中进行修改。复杂度分析:时间复杂度:O(mn),其中 m 和 n 分别为 board 的行数和列数。空间复杂度:O(mn),为复制数组占用的空间。解法二:原地数组采取一些额外的规则,如果细胞周围有一个活细胞,那么就加10。比如31,表示此细胞是活的,并且周围有3个活细胞;又比如20,表示...

2020-04-02 22:56:39 17

原创 [LeetCode]1111. 有效括号的嵌套深度

解题思路这道题目给的字符串一定是有效的,所以不用担心不能匹配的情形。题目要求给定的一个有效括号字符串seq,将其分成两个不相交的有效括号字符串 A 和 B,并使这两个字符串的深度最小,也即 max(depth(A), depth(B))的可能取值最小,也就是说要使得两个子序列的括号嵌套深度较大者尽量的小。既然想要两个子序列的嵌套深度中较大者尽量小,那么最好能够让两个子序列的嵌套深度相同。考虑任...

2020-04-02 01:57:37 31

原创 [LeetCode]20. 有效的括号

解题思路辅助栈法:用列表模拟栈,用字典键值对模拟括号匹配。1)特判:s为空时返回True2)建立栈空间(列表stack)和括号匹配字典mapping3)判断s中,若为左括号则进栈,若为右括号时栈为空或右括号与栈顶左括号不匹配,则返回False4)遍历s结束后,若栈为空则返回True,栈不为空返回False复杂度分析:时间复杂度:O(n),因为我们一次只遍历给定的字符串中的一个字符并在...

2020-04-02 01:56:36 19

原创 [LeetCode]912. 排序数组

排序算法总结一、冒泡排序代码1:def bubble_sort(list): length = len(list) # 第一级遍历 for index in range(length): # 第二级遍历 for j in range(1, length - index): if list[j...

2020-04-02 01:54:24 44

提示
确定要删除当前文章?
取消 删除