![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
傻瓜教程(LC)
Grayson Zhang
热爱学习
展开
-
100. 相同的树
100. 相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内-104 <原创 2021-03-05 21:57:58 · 58 阅读 · 0 评论 -
304. 二维区域和检索 - 矩阵不可变
304. 二维区域和检索 - 矩阵不可变给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。例:子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。解题:本质上是一道前缀和的题目。两个思路:一、一维前缀和把一个矩阵看做存储一个数列的列表,分别用前缀和求每个数列的解,最后再相加class NumMatrix: def原创 2021-03-03 18:28:36 · 89 阅读 · 1 评论 -
303. 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))解题:前缀和(l原创 2021-03-01 15:04:53 · 59 阅读 · 0 评论 -
896. 单调数列
896. 单调数列如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A 是单调数组时返回 true,否则返回 false。解题:确保数列中不会同时出现增和减class Solution: def isMonotonic(self, A: List[int]) -> bool:原创 2021-02-28 21:18:35 · 77 阅读 · 0 评论 -
395. 至少有K个重复字符的最长子串
395. 至少有K个重复字符的最长子串找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。示例 1:输入:s = "aaabb", k = 3输出:3最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。解题:递归看到“子串”类问题想到滑动窗口,但是原创 2021-02-27 23:00:23 · 170 阅读 · 0 评论 -
867. 转置矩阵
867. 转置矩阵给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:matrix = [[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:m == matrix.lengthn == matrix[i]原创 2021-02-25 15:01:30 · 119 阅读 · 0 评论 -
766. 托普利茨矩阵
766. 托普利茨矩阵给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。解题开始是想利用循环,通过坐标变换的形式把矩阵遍历一遍,这样做每个位置基本上只用遍历一遍,执行起来快一些,代价是代码编写极其繁琐。后来学会了矩阵的切片(其实和列表是一样的),于是将每个数与其右下角的数对比。这样执行起来会复杂一点点,但代码编写极其简单class Solutio原创 2021-02-22 13:57:38 · 97 阅读 · 0 评论 -
697. 数组的度
697. 数组的度给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。解题:两个part1.遍历数组,找出“度”2.记录每个“度”左边界和右边界class Solution: def findShortestSubArray(self, nums: List[int]) -> int: left, right = dict(),原创 2021-02-21 19:45:12 · 94 阅读 · 0 评论 -
1438. 绝对差不超过限制的最长连续子数组
1438. 绝对差不超过限制的最长连续子数组给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。import sortedcontainersclass Solution: def longestSubarray(self, nums: List[int], limit: int) -> int: s = sorted原创 2021-02-21 18:59:23 · 92 阅读 · 0 评论 -
1004. 最大连续1的个数 III
1004. 最大连续1的个数 III给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:原创 2021-02-19 19:17:41 · 58 阅读 · 0 评论 -
995. K 连续位的最小翻转次数
995. K 连续位的最小翻转次数在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。示例 1:输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0], K = 2输出:-1解释:无论我们怎样翻转大小为 2 的原创 2021-02-19 11:25:30 · 57 阅读 · 0 评论 -
566. 重塑矩阵
566. 重塑矩阵在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。解题class Solution: def matrixReshape(self, nums: List原创 2021-02-17 23:06:09 · 65 阅读 · 0 评论 -
561. 数组拆分 I
561. 数组拆分 I给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和 。解题:排序题目核心在于排序。这里只用了系统给的排序,其实还可以在优化的。class Solution: def arrayPairSum(self, nums: List[int]) -> int: nums.sort()原创 2021-02-16 15:58:58 · 70 阅读 · 0 评论 -
485. 最大连续1的个数
485. 最大连续1的个数给定一个二进制数组, 计算其中最大连续1的个数。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含 0 和1。输入数组的长度是正整数,且不超过 10,000。解题class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int:一、设定变量与数据更新变量原创 2021-02-15 10:00:19 · 95 阅读 · 1 评论 -
567. 字符串的排列
567. 字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例 1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例 2:输入: s1= "ab" s2 = "eidboaoo"输出: False提示:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间解题:滑动窗口既然排原创 2021-02-14 20:10:45 · 387 阅读 · 2 评论 -
992. K 个不同整数的子数组
992. K 个不同整数的子数组给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。解题:双指针看到子数组,首选双指针,然后暴力解(两个循环,判断计数)class Solution: def subarraysWithKDistinct(self, A: List[int], K: int) -> int原创 2021-02-09 10:41:17 · 2153 阅读 · 2 评论 -
978. 最长湍流子数组
978. 最长湍流子数组当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。原创 2021-02-08 20:06:14 · 135 阅读 · 0 评论 -
665. 非递减数列
665. 非递减数列给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输出: false解释: 你不能在原创 2021-02-07 18:39:22 · 175 阅读 · 0 评论 -
1423. 可获得的最大点数
1423. 可获得的最大点数几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最原创 2021-02-06 09:45:17 · 128 阅读 · 0 评论 -
1208. 尽可能使字符串相等
1208. 尽可能使字符串相等给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则原创 2021-02-05 11:25:37 · 165 阅读 · 0 评论 -
643. 子数组最大平均数 I
643. 子数组最大平均数 I给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。示例:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75提示:1 <= k <= n <= 30,000。所给数据范围 [-10,000,10,000]。解题一、滚动数组用滚动数组来维护maxTotal的更新,减少时间复杂度二、对maxTotal初始的定义要谨慎原创 2021-02-04 12:53:56 · 96 阅读 · 0 评论 -
480. 滑动窗口中位数
480. 滑动窗口中位数题目描述中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。例如:[2,3,4],中位数是 3[2,3],中位数是 (2 + 3) / 2 = 2.5给你一个数组 nums,有一个长度为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口向右移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出由它们组成的数组。解题:双指针暴力破解class Solution: de原创 2021-02-03 22:25:11 · 270 阅读 · 0 评论 -
424. 替换后的最长重复字符
424. 替换后的最长重复字符给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 10**4。思路:双指针(快慢指针)右指针移动并更新数据判断是否满足左指针移动条件最终以左右指针差为答案1.准备(1)数组:用于记录字母重复字数,长26(2)ord():与数组索引适配2.左指针移动条件:当前区间小于最大替换区间本质上,左右指针只是计数,右指针不断移动原创 2021-02-02 21:31:37 · 156 阅读 · 1 评论 -
888. 公平的糖果棒交换
爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。如果有多个答案,你可以返回其中任何一个。保证答案存在。示例 1:输入:A = [1,1], B = [2,2]输出原创 2021-02-01 14:56:32 · 88 阅读 · 0 评论 -
839. 相似字符串组
839. 相似字符串组如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars”原创 2021-01-31 20:11:46 · 121 阅读 · 1 评论 -
724. 寻找数组的中心索引(傻瓜教程)(python)(LC)
724. 寻找数组的中心索引给你一个整数数组nums,请编写一个能够返回数组 “中心索引” 的方法。数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。注意:中心索引可能出现在数组的两端。 示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与右侧数之和 (原创 2021-01-28 19:14:45 · 560 阅读 · 0 评论 -
1579. 保证图可完全遍历(并查集)(傻瓜教程)(python)(LC)
1579. 保证图可完全遍历Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3 种类型的边:类型 1:只能由 Alice 遍历。类型 2:只能由 Bob 遍历。类型 3:Alice 和 Bob 都可以遍历。给你一个数组 edges ,其中 edges[i] = [typei, ui, vi] 表示节点 ui 和 vi 之间存在类型为 typei 的双向边。请你在保证图仍能够被 Alice和 Bob 完全遍历的前提下,找出可以删除的最大边数。如果从任何节点开始,Alice 和 Bo原创 2021-01-27 11:50:18 · 199 阅读 · 0 评论 -
1122. 数组的相对排序(傻瓜教程)(python)(LC)
1122. 数组的相对排序给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。 示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19] 提示:1 <=原创 2021-01-26 16:12:13 · 286 阅读 · 0 评论 -
1128. 等价多米诺骨牌对的数量(傻瓜教程)(python)(LC)
1128. 等价多米诺骨牌对的数量给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes原创 2021-01-26 11:17:32 · 289 阅读 · 0 评论 -
959. 由斜杠划分区域(并查集)(傻瓜教程)(python)(LC)
959. 由斜杠划分区域在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。返回区域的数目。 完整代码class UF: def __init__(self, M): self.parent = {} self.cnt = 0 # 初始化 parent,size 和 cnt for i i原创 2021-01-25 16:13:13 · 232 阅读 · 0 评论 -
1319. 连通网络的操作次数(傻瓜教程)(python)(LC)
1319. 连通网络的操作次数用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回 -原创 2021-01-23 20:57:40 · 155 阅读 · 1 评论 -
628. 三个数的最大乘积(傻瓜教程)(python)(LC)
628. 三个数的最大乘积给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24 注意:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。 解题基本思路:最大乘积的组合可能为(+,+,+)或(+,-,-)一、排序(调用函数)class Solution: d原创 2021-01-20 19:04:30 · 1550 阅读 · 0 评论 -
1232. 缀点成线(傻瓜教程)(python)(LC)
1232. 缀点成线在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。 示例 :输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]输出:true 解题:纯数学,解析几何,没啥好说的class Solutio原创 2021-01-18 15:58:04 · 294 阅读 · 0 评论 -
1202. 交换字符串中的元素(并查集)(傻瓜教程)(python)(LC)
1202. 交换字符串中的元素给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。你可以 任意多次交换 在 pairs 中任意一对索引处的字符。返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。 示例 1:输入:s = "dcab", pairs = [[0,3],[1,2]]输出:"bacd"解释: 交换 s[0] 和 s[3], s = "bcad"交换 s[1] 和 s原创 2021-01-15 16:35:15 · 228 阅读 · 1 评论 -
947. 移除最多的同行或同列石头(并查集)(傻瓜教程)(python)(LC)
947. 移除最多的同行或同列石头n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。给你一个长度为 n 的数组 stones ,其中 stones[i] = [xi, yi] 表示第 i 块石头的位置,返回 可以移除的石子 的最大数量。 示例 1:输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]输出:5解释:一种移除 5 块石头的方法如下所示:原创 2021-01-15 15:58:29 · 206 阅读 · 0 评论 -
684. 冗余连接(并查集)(傻瓜教程)(python)(LC)
684. 冗余连接在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满足相同的格式 u原创 2021-01-15 13:48:41 · 223 阅读 · 0 评论 -
1018. 可被 5 整除的二进制前缀(傻瓜教程)(python)(LC)
1018. 可被 5 整除的二进制前缀给定由若干 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 整原创 2021-01-15 13:10:31 · 189 阅读 · 0 评论 -
228. 汇总区间(傻瓜教程)(python)(LC)
228. 汇总区间给定一个无重复元素的有序整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:“a->b” ,如果 a != b“a” ,如果 a == b 示例 1:输入:nums = [0,1,2,4,5,7]输出:["0->2","4->5","7"]解释:区间范围是:原创 2021-01-13 17:03:10 · 237 阅读 · 0 评论 -
189. 旋转数组(傻瓜教程)(python)(LC)
189. 旋转数组题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,原创 2021-01-09 18:51:44 · 117 阅读 · 0 评论 -
509. 斐波那契数(傻瓜教程)(python)(LC)
509. 斐波那契数题目描述:斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。法一:递归(动态规划)class Solution: def fib(self, n: int) -> int: if n == 0:原创 2021-01-09 18:26:00 · 130 阅读 · 0 评论