![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
有dian意思
这个作者很懒,什么都没留下…
展开
-
1049. 最后一块石头的重量 II(01背包问题变种-动态规划)
有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回...原创 2020-03-24 14:07:36 · 253 阅读 · 0 评论 -
面试题63. 股票的最大利润(动态规划)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-...原创 2020-03-21 22:06:06 · 509 阅读 · 0 评论 -
面试题61. 扑克牌中的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例:输入: [0,0,1,2,5]输出: True思路首先排序,其次统计数组中0的个数,最后统计排序后的数组中相邻数字之间的空缺个数,如果空缺个数小于等于0的个数且数组中除0之外没有重复的,就是连续的,否...原创 2020-03-21 20:53:32 · 149 阅读 · 0 评论 -
面试题60. n个骰子的点数(动态规划)
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02...原创 2020-03-21 20:23:40 · 219 阅读 · 0 评论 -
面试题59 - I. 滑动窗口的最大值
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 ...原创 2020-03-21 16:13:26 · 138 阅读 · 0 评论 -
面试题58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。思路1没啥可说的在对于大数据时join的效率要高于+因为+操作是生成一个新的字符串,需要创建额外的内存,当数据量大时会很耗内存的join对多个字符进行连接时效率高,只会有一次内存的申请。而...原创 2020-03-21 15:29:25 · 83 阅读 · 0 评论 -
面试题58 - I. 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。思路按空格分割成单词列表,1.末位单词+空格 2.最后一个单词末位不加空格class Solution: def reverseWords(self, s: str) -> str:...原创 2020-03-21 15:18:50 · 128 阅读 · 0 评论 -
面试题57 - II. 和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]考虑用两个数i,j分别表示序列的最小值和最大值。首先把i,j初始化为1。如果从i到j的和大于s,从序列中去掉较小的值i,并增大i的值;反之,去掉j的值,并增大j的...原创 2020-03-21 15:00:32 · 74 阅读 · 0 评论 -
面试题57. 和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]思路:双指针法先在数组中选择两个数字,如果它们的和等于输入的s,那么就找到了要找的数字;如果小于s,希望两个数字的和大一些,由于数组已经排好序了,可以考虑选...原创 2020-03-21 14:21:43 · 85 阅读 · 0 评论 -
面试题56 - II. 数组中数字出现的次数 II(位操作!!!!)
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。hashmapclass Solution: def singleNumber(self, nums: List[int]) -> int: dic = {} for i in nums: if i in dic: ...原创 2020-03-21 14:05:01 · 311 阅读 · 0 评论 -
面试题56 - I. 数组中数字出现的次数(位操作的精妙不太懂)
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。hashmap(字典实现)此解法空间复杂度为O(n)class Solution: def singleNumbers(self, nums: List[int]) -> List[int]: dic = {} ...原创 2020-03-21 14:02:21 · 78 阅读 · 0 评论 -
面试题53 - II. 0~n-1中缺失的数字(二分变种)
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8排序数组中的搜索问题,首先想到 二分法 解决。根据题意,数组可以按照以下规则划分为两部分。左子数组:nums[i]=inums[i]nums[i] = in...原创 2020-03-20 22:25:18 · 162 阅读 · 0 评论 -
面试题53 - I. 在排序数组中查找数字 I(二分查找上下界问题)
统计一个数字在排序数组中出现的次数。思路:二分查找具体思考过程见注释def search_left_right(alist, target): i, j = 0, len(alist) - 1 # 查找右边界 while i <= j: mid = i + (j - i) // 2 if alist[mid] <= targ...原创 2020-03-20 20:20:12 · 166 阅读 · 0 评论 -
面试题52. 两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共节点。输入: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 为 ...原创 2020-03-20 15:17:13 · 109 阅读 · 0 评论 -
面试题50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。示例:s = “abaccdeff”——返回 “b”s = “” ——返回 " "s = “cc”——返回“ ”思路建立普通的字典,也是遍历一边字符串s,将这些字符和他们的出现次数放入到字典中再次遍历s,在字典中进行查找,找到第一个值为1的字符即可,否则返回" "时间复杂度O(n),空间复杂度O(1),因为字符的...原创 2020-03-20 13:56:32 · 132 阅读 · 0 评论 -
面试题49. 丑数
我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。说明: 1 是丑数;n 不超过1690。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。思路最普通的想法时遍历n个数,找到符合要求的数更好的思路是丑数都是2,3,5的倍数,直接找到他们。不对非...原创 2020-03-20 13:29:52 · 96 阅读 · 0 评论 -
面试题48. 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:动态规划首先定义函数f(i)为以第i个字符为结尾的不包含重复字符的子字符串的最长长度,计算f(i)时,f(i-1)已知。如果第i个字以前没有出现过,那么f(i) = f(i-1)+1...原创 2020-03-20 13:00:02 · 130 阅读 · 0 评论 -
面试题47. 礼物的最大价值
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物思...原创 2020-03-20 11:05:32 · 194 阅读 · 0 评论 -
面试题42. 连续子数组的最大和
面试题42. 连续子数组的最大和输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路:动态规划时间复杂度 O(N) : 线性遍历数组 nums 即可获得...原创 2020-03-19 23:50:06 · 127 阅读 · 0 评论 -
面试题40. 最小的k个数
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。思路1:先进行排序使用sort()函数class Solution: def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: arr.sort() ...原创 2020-03-19 22:49:17 · 69 阅读 · 0 评论 -
面试题39. 数组中出现次数超过一半的数字
思路:依据数组特点时间复杂度为O(n)数组中有一个数字出现的次数超过一般,也就是说它出现的次数比其他所有数字出现次数的和还要多。因此,可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,另一个是次数。当遍历到下一个数字的时候,如果下一个数字和之前保存的数字是相等的,次数+1;不相等,次数-1;如果次数为0,将保存的数字更新为当前数字,并把次数重置为1。由于要找的数字出现的次数比其他的数字...原创 2020-03-19 22:30:52 · 81 阅读 · 0 评论 -
面试题38. 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]思路取出第i个数,全排列其他非i位置的数拼在后面class Solution: def permutation(self, s: str) -> List[s...原创 2020-03-19 21:18:31 · 103 阅读 · 0 评论 -
面试题33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。思路后序遍历性质: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。二叉搜索树性质: 左子树任意节点的值 < 根节点的值;右子树任意节点的值 > 根节点的值。方法一:递归分治子树递推性质: 对于 [ ...原创 2020-03-19 16:34:47 · 102 阅读 · 0 评论 -
面试题31. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出...原创 2020-03-19 16:30:08 · 105 阅读 · 0 评论 -
面试题30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -...原创 2020-03-19 16:29:39 · 102 阅读 · 0 评论 -
面试题35. 复杂链表的复制
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 nu...原创 2020-03-19 16:27:42 · 91 阅读 · 0 评论 -
面试题29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]思路:寻找边界条件空值处理: 当 matrix 为空时,直接返回空列表 [] 即可。初始化: 矩阵 左、右、上、下 四个边界 l , r , t , b ,用于打印的结果列表 res 。循环打...原创 2020-03-18 00:53:26 · 153 阅读 · 0 评论 -
面试题26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。思路:递归假设R是树A中以R为节点的子树...原创 2020-03-18 00:52:47 · 88 阅读 · 0 评论 -
面试题21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路1:垃圾解法class Solution: def exchange(self, nums: List[int]) -> List[int]: res=[] for num in nums: #偶数 ...原创 2020-03-18 00:52:05 · 63 阅读 · 0 评论 -
面试题22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5思路:快慢双指针为了实现只遍历一次就能...原创 2020-03-18 00:51:45 · 75 阅读 · 0 评论 -
面试题24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。注意:h–>i–>j–>… 调整后:h<–i j–>…若在调整节点i的next指针时,节点i的next指向了前一个节点,导致无法在链表中找到i的下一个节点j。为了避免出现这种链表在节点i处断开的情况,需要在调整节点i的next之前,把节点j保存下来。也就是说,在调整节点i的next指针时,...原创 2020-03-18 00:51:33 · 78 阅读 · 0 评论 -
21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:递归首先分析合并两个链表的过程。分析从合并两个链表的头节点开始。链表1的头节点的值小于链表2的头节点的值,因此链表1的头节点将是合并后链表的头节点,否则链表...原创 2020-03-18 00:51:19 · 57 阅读 · 0 评论 -
面试题19. 正则表达式匹配(hard)
给定一个字符串 (s) 和一个字符模式 §。实现支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符。‘*’ 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:思路1:递归class Solution: ...原创 2020-03-15 19:25:18 · 174 阅读 · 0 评论 -
面试题18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.# Definition for singly-linked list.# class Lis...原创 2020-03-15 15:52:50 · 74 阅读 · 0 评论 -
面试题16. 数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。输入: 2.00000, 10输出: 1024.00000思路1:class Solution: def myPow(self, x: float, n: int) -> float: if x ==...原创 2020-03-15 14:37:24 · 65 阅读 · 0 评论 -
面试题15. 二进制中1的个数
思路1:逐位判断根据 与运算 定义,设二进制数字 nnn ,则有:若 n&1=0,则 n二进制最右一位 为 0 ;若 n&1=1,则 n二进制最右一位 为 1。根据以上特点,考虑以下 循环判断 :判断 n最右一位是否为 1,根据结果计数。将 n右移一位(本题要求把数字 n 看作无符号数,因此使用 无符号右移 操作)。算法流程:初始化数量统计变量 res=0。循环...原创 2020-03-15 13:51:57 · 137 阅读 · 0 评论 -
面试题14- I. 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m] 。请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 ...原创 2020-03-15 12:07:35 · 73 阅读 · 0 评论 -
面试题13. 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少...原创 2020-03-15 10:47:17 · 140 阅读 · 0 评论 -
面试题12. 矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵...原创 2020-03-15 10:02:10 · 127 阅读 · 0 评论 -
面试题10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路:同斐波那契数列使用动态规划class Solution: def numWays(self, n: int) -> int: # f(0)=f(1)=1 f(...原创 2020-03-14 22:59:46 · 152 阅读 · 0 评论