霍乱时期的Python之路
文章平均质量分 56
2020春节,霍乱时期的Python修炼之路
黄元帅
努力做好一件事
展开
-
腾讯精选练习50题索引
LeetCode 腾讯精选练习 50 题 索引目录原创 2021-02-05 00:05:47 · 190 阅读 · 0 评论 -
《LeetCode-1001-Nights》-Python版Leetcode题解目录
利用CSDN做一个多级索引目录1-100101-200201-300301-400401-500501-600601-700701-800801-900901-1000原创 2020-11-11 00:20:37 · 389 阅读 · 0 评论 -
【Leetcode】3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)
一、题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。二、示例提示0 <= s.length <= 5 * 104s 由英文字母、数字、符号和空格组成三、解法解法-滑动窗口#时间:O(n)#空间:O(n)class Solution: def lengthOfLongestSubstring(self, s: str) -> int: n = len(s) if n < 2:原创 2021-07-21 23:35:06 · 185 阅读 · 1 评论 -
【Leetcode】26. 删除有序数组中的重复项(Remove Duplicates from Sorted Array)
一、题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。二、示例说明三、解法解法-双指针(同向)#时间:O(n)#空间:O(1)class Solution: def removeDuplicates(self, nums: List[int]) -> int: #有序 n = le原创 2021-07-21 00:35:29 · 139 阅读 · 0 评论 -
【Leetcode】153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array)
一、题目已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。给你一个元素值 互不相同 的数原创 2021-07-21 00:06:57 · 182 阅读 · 0 评论 -
【Leetcode】119. 杨辉三角 II(Pascal‘s Triangle II)
一、题目给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。二、示例三、解法解法-迭代法#时间:O(n^2)#空间:O(k)class Solution: def getRow(self, rowIndex: int) -> List[int]: def generateRow(last): return [1] + [last[i-1] + last[i] for i原创 2021-07-20 23:06:13 · 207 阅读 · 0 评论 -
【Leetcode】283. 移动零(Move Zeroes)
一、题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。二、示例说明必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。三、解法解法-双指针(同向)#时间:O(n)#空间:O(1)class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums i原创 2021-07-20 18:49:26 · 124 阅读 · 0 评论 -
【Leetcode】118. 杨辉三角(Pascal‘s Triangle)
一、题目给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。二、示例三、解法解法-迭代法#时间:O(n^2)#空间:O(n^2)class Solution: def generate(self, numRows: int) -> List[List[int]]: def generateNewRow(last): return [last[i-1]+last[i]原创 2021-07-20 18:10:20 · 164 阅读 · 0 评论 -
【Leetcode】485. 最大连续 1 的个数(Max Consecutive Ones)
一、题目给定一个二进制数组, 计算其中最大连续 1 的个数。二、示例提示输入的数组只包含 0 和 1 。输入数组的长度是正整数,且不超过 10,000。三、解法解法-双指针法(同向)#时间:O(n)#空间:O(1)class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: def returnMax(now,fast,slow): temp原创 2021-07-20 17:21:50 · 175 阅读 · 0 评论 -
【Leetcode】27. 移除元素(Remove Element)
一、题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。二、示例说明提示0 <= nums.length <= 1000 <= nums[i] <= 500 <= val <= 100三、解法解法-双指针(同向)#时间:O(n)#空间原创 2021-07-20 16:44:55 · 218 阅读 · 0 评论 -
【Leetcode】561. 数组拆分 I(Array Partition I)
一、题目给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和 。二、示例提示1 <= n <= 104nums.length == 2 * n-104 <= nums[i] <= 104三、解法解法-贪心法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法原创 2021-07-20 12:11:32 · 177 阅读 · 0 评论 -
【Leetcode】28. 实现 strStr()(Implement strStr())
一、题目实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。二、示例提示0 <= hays原创 2021-07-19 17:05:02 · 198 阅读 · 3 评论 -
【Leetcode】498. 对角线遍历(Diagonal Traverse)
一、题目给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。二、示例说明给定矩阵中的元素总数不会超过 100000 。三、解法解法-暴力法#时间:O(mn)#空间:O(max(m,n))class Solution: def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]: def addLine(length,ty原创 2021-07-17 14:11:31 · 187 阅读 · 0 评论 -
【Leetcode】面试题 01.08. 零矩阵(Zero Matrix)
一、题目编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。二、示例三、解法解法-辅助空间#时间:O(n^2)#空间:O(n^2)class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """原创 2021-07-17 12:24:57 · 541 阅读 · 2 评论 -
【Leetcode】56. 合并区间(Merge Intervals)
一、题目以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。二、示例示例 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原创 2021-04-09 22:52:43 · 183 阅读 · 0 评论 -
【Leetcode】724. 寻找数组的中心下标(Search Insert Position)
一、题目给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。注意:中心下标可能出现在数组的两端。二、示例示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 (1 + 7 + 3 = 11),右侧数之和 (5 + 6 = 11) ,二者相原创 2021-04-09 22:44:41 · 143 阅读 · 0 评论 -
【Leetcode】35. 搜索插入位置(Search Insert Position)
一、题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。二、示例示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0三、解法解法 双指针二分法#时间:O(logn)#空间:O(1)class Solution:原创 2021-04-09 22:32:38 · 108 阅读 · 0 评论 -
【Leetcode】209. 长度最小的子数组(Minimum Size Subarray Sum)
一、题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。二、示例示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1原创 2021-04-04 13:47:27 · 130 阅读 · 1 评论 -
【Leetcode】125. 验证回文串(Valid Palindrome)
一、题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。二、示例示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false说明:本题中,我们将空字符串定义为有效的回文串。三、解法解法1 提前处理class Solution: def isPalindrome(self, s: str) -> bool: s = [x.lo原创 2021-04-04 12:18:52 · 98 阅读 · 0 评论 -
【Leetcode】215. 数组中的第K个最大元素(Kth Largest Element in an Array)
一、题目在未排序的数组中找到第 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 ≤ 数组的长度。三、解法解法1 指定初始值from random import randomclass Solution: def f原创 2021-04-03 00:24:16 · 138 阅读 · 3 评论 -
【Leetcode】75. 颜色分类(Sort Colors)
一、题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。二、示例示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1]提示:n == n原创 2021-04-01 23:52:49 · 208 阅读 · 0 评论 -
【Leetcode】557. 反转字符串中的单词 III(Reverse Words in a String III)
No557. 反转字符串中的单词 III题目给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”提示在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。思路新建reverseAWord函数,功能是返回一个单词的倒置将单词字符串用空格分割得到words,然后遍历其中的每个单词,最后用空格拼接成字符串原创 2021-02-10 09:49:03 · 363 阅读 · 1 评论 -
【Leetcode】344. 反转字符串(Reverse String)
No344. 反转字符串题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例1输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例2输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,原创 2021-02-09 22:30:53 · 177 阅读 · 0 评论 -
【Leetcode】292. Nim 游戏(Nim Game)
No292. Nim 游戏题目你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。示例1输入:n = 4输出:false解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是原创 2021-02-09 22:28:04 · 359 阅读 · 1 评论 -
【Leetcode】238. 除自身以外数组的乘积(Product of Array Except Self)
No238. 除自身以外数组的乘积题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例输入: [1,2,3,4]输出: [24,12,8,6]提示题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶你可以在常数空间复杂度内完成这个题目吗?(原创 2021-02-09 22:26:43 · 129 阅读 · 0 评论 -
【Leetcode】237. 删除链表中的节点(Delete Node in a Linked List)
No237. 删除链表中的节点题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例1输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例2输入:head = [4,5,1,9], node = 1输出:[4,5,9原创 2021-02-09 21:54:18 · 239 阅读 · 0 评论 -
【Leetcode】236. 二叉树的最近公共祖先(Lowest Common Ancestor of a Binary Tree)
No236. 二叉树的最近公共祖先题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例1输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1原创 2021-02-09 21:48:28 · 105 阅读 · 0 评论 -
【Leetcode】235. 二叉搜索树的最近公共祖先(Lowest Common Ancestor of a Binary Search Tree)
No217. 存在重复元素题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例1输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8原创 2021-02-09 21:46:00 · 170 阅读 · 0 评论 -
【Leetcode】231. 2的幂(Power of Two)
No231. 2的幂题目给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例1输入: 1输出: true解释: 20 = 1示例2输入: 16输出: true解释: 24 = 16示例3输入: 218输出: false思路若小于等于0,返回False;否则对n进行迭代,循环条件为n为偶数,循环体内部对n进行除2操作;循环外需要判断一下n是否为1,若为1则表明符合条件,返回True;否则返回False。解题代码(Python3)class Solu原创 2021-02-09 21:44:24 · 185 阅读 · 0 评论 -
【Leetcode】230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
No230. 二叉搜索树中第K小的元素题目给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例1输入: root = [3,1,4,null,2], k = 1输出: 1示例2输入: root = [5,3,6,2,4,null,null,1], k = 3输出: 3进阶如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化原创 2021-02-09 21:41:55 · 248 阅读 · 0 评论 -
【Leetcode】217. 存在重复元素(Contains Duplicate)
No217. 存在重复元素题目给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例1输入: [1,2,3,1]输出: true示例2输入: [1,2,3,4]输出: false示例3输入: [1,1,1,3,3,4,3,2,4,2]输出: true思路:利用set和list比较长度解题代码(Python3)class Solution: def conta原创 2021-02-09 21:38:06 · 194 阅读 · 0 评论 -
【Leetcode】215. 数组中的第K个最大元素(Kth Largest Element in an Array)
No215. 数组中的第K个最大元素题目在未排序的数组中找到第 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 ≤ 数组的长度。思路排序,默认是升序利用Python索引的特性返回解题代码(Python3)class Solut原创 2021-02-09 21:36:06 · 259 阅读 · 0 评论 -
【Leetcode】206. 反转链表(Reverse Linked List)
No206. 反转链表题目反转一个单链表。示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路1第一次遍历,存数据;第二次遍历,改数据;解题代码(Python3)class Solution: def reverseList(self, head: ListNode) -> ListNode:原创 2021-02-08 17:42:27 · 280 阅读 · 0 评论 -
【Leetcode】169. 多数元素(Majority Element)
No169. 多数元素题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1输入:[3,2,3]输出:3示例2输入:[2,2,1,1,1,2,2]输出:2进阶尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。#TODO思路:遍历一遍,记录每个元素出现的次数;然后返回字典键值最大的键名;解题代码(Python3)class原创 2021-02-08 17:41:06 · 140 阅读 · 0 评论 -
【Leetcode】160. 相交链表(Intersection of Two Linked Lists)
No160. 相交链表题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例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输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,原创 2021-02-08 17:39:55 · 274 阅读 · 0 评论 -
【Leetcode】155. 最小栈(Min Stack)
No155. 最小栈题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,原创 2021-02-08 17:34:44 · 274 阅读 · 3 评论 -
【Leetcode】148. 排序链表(Sort List)
No148. 排序链表题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例1输入:head = [4,2,1,3]输出:[1,2,3,4]示例2输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例3输入:head = []输出:[]提示链表中节点的数目在范围 [0, 5 * 104] 内-105 <= Node原创 2021-02-08 17:33:11 · 399 阅读 · 2 评论 -
【Leetcode】146. LRU 缓存机制(LRU Cache)
No146. LRU 缓存机制题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达原创 2021-02-08 17:28:07 · 313 阅读 · 2 评论 -
【Leetcode】142. 环形链表 II(Linked List Cycle II)
No142. 环形链表 II题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。你是否可以使用 O(1) 空间解决此题?示例1输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:原创 2021-02-08 14:57:17 · 160 阅读 · 0 评论 -
【Leetcode】141. 环形链表(Linked List Cycle)
No141. 环形链表题目给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。你能用 O(1)(即,常量)内存解决此问题吗?示例1输入:head = [3原创 2021-02-08 14:55:52 · 174 阅读 · 0 评论