文章分类 -  算法题

摘要:def binary_search(nums,target): i,j = 0,len(nums)-1 while i <= j: mid = (l + r) >> 1 if nums[mid] < target: # < 找到的是最左边的 <= 找到的是最右边的后一个 i = mid + 1 el 阅读全文
posted @ 2022-08-12 20:06 Liang-ml 阅读(18) 评论(0) 推荐(0) 编辑
摘要:又叫俄罗斯农民算法 def sum_and(a,b): res = 0 while b: if b & 1: res += a b >>= 1 a <<= 1 return res 阅读全文
posted @ 2022-08-12 17:00 Liang-ml 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。 中等 请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 方法:动态规划 时间复杂度O(n) 空间复杂度O(1) 阅读全文
posted @ 2022-08-07 11:44 Liang-ml 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题目:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。 中等 给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 方法:动态规划 时间复杂度O(mn) 空 阅读全文
posted @ 2022-08-06 22:45 Liang-ml 阅读(8) 评论(0) 推荐(0) 编辑
摘要:题目: 中等 方法:emmm 时间复杂度O(n) 空间复杂度O(n) 没啥特殊的,就是代码细节挺多 def strToInt(str): """ :type str: str :rtype: int """ s = str.strip() # 一定是先strip再判断,否则' '这种后续会报错 if 阅读全文
posted @ 2022-08-06 16:36 Liang-ml 阅读(10) 评论(0) 推荐(0) 编辑
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 中等 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序 阅读全文
posted @ 2022-08-06 16:20 Liang-ml 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 中等 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 方法:动态规划 时间复杂度O(n) 空间复杂度O(n) 在已有概率的情况下,再 阅读全文
posted @ 2022-08-06 16:04 Liang-ml 阅读(20) 评论(0) 推荐(0) 编辑
摘要:题目:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 困难 方法:单调递减的双端队列 时间复杂度O(n) 空间复杂度O(n) 如果每次挪动滑动窗口都遍历去找最值,过于耗时,因此维护一个单调递减的双端队列 移动窗口时,当移除的数等于队首时,需要将队首出队列 若新入队的数大 阅读全文
posted @ 2022-08-06 15:26 Liang-ml 阅读(44) 评论(0) 推荐(0) 编辑
摘要:题目:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 简单 方法:位运算 时间复杂度O(1) 空间复杂度O(1) 不让用 + - * /,说明只能用位运算 由于python的存储机制,没有多少位的说法,理论上整型的长度为无限大(只和内存大小相关), 阅读全文
posted @ 2022-08-06 14:50 Liang-ml 阅读(13) 评论(0) 推荐(0) 编辑
摘要:题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 中等 方法:动态规划 时间复杂度O(n) 空间复杂度O(1) 动态规划,dp[i]记录前i天的最大利润 动态记录前i天的买进最低花费,用新的一天的卖出价格减去最低花费,与dp[i-1]比较,取大的 d 阅读全文
posted @ 2022-08-06 14:17 Liang-ml 阅读(9) 评论(0) 推荐(0) 编辑
摘要:题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 中等 方法:动态规划 时间复杂度O(n) 空间复杂度O(n) 本题可以采用动态规划,记录以当前末尾字符为结尾的最长不重复子字符串长度。 需要使用一个哈希表来记录某一字符上一次出现的index dic[s[ i ]] 阅读全文
posted @ 2022-08-06 14:09 Liang-ml 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题目:请实现两个函数,分别用来序列化和反序列化二叉树。 困难 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 方法:层序遍历 时间复杂度O(n) 空间复杂度O(n) 阅读全文
posted @ 2022-08-06 11:50 Liang-ml 阅读(13) 评论(0) 推荐(0) 编辑
摘要:题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 中等 → 方法:中序遍历 时间复杂度O(n) 空间复杂度O(n) 二叉搜索树的递增顺序为其中序遍历,故在中序遍历的时候修改节点即可,但需用全局变量记住head,单独头尾相连 阅读全文
posted @ 2022-08-06 11:38 Liang-ml 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 困难 方法:归并排序 时间复杂度O(nlogn) 空间复杂度O(n) 归并排序就是按照二分法将数组划分为若干个小数组,回溯的时候按照既定顺序两两合并,这样可以在合并的时 阅读全文
posted @ 2022-08-06 11:25 Liang-ml 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 方法:递减双端队列 时间复杂度O(1) 空间复杂度O 阅读全文
posted @ 2022-08-02 22:35 Liang-ml 阅读(9) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 方法:动态规划 时间复杂度O(n) 空间复杂度O(1) 动态规划每个位置是以当前指针为结尾的子列表的最大长度 dp[i] = dp[i-1] + (nums[i] if dp[i 阅读全文
posted @ 2022-08-01 22:34 Liang-ml 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 中等 请写一个函数,求任意第n位对应的数字。 方法:迭代 推论 主要步骤就是找到第n位在哪个数字里,这个数字是几位数,然后数字的位 阅读全文
posted @ 2022-08-01 22:16 Liang-ml 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目:0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 简单 方法:动态规划 时间复杂度O(n) 空间复杂度O(1) 约瑟夫环问题,动态规划 f(n) = ( f(n-1) + m ) % n 阅读全文
posted @ 2022-08-01 22:05 Liang-ml 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 简单方法:切片 时间复杂度O(n) 空间复杂度O(n) def reverseLeftWo 阅读全文
posted @ 2022-08-01 21:59 Liang-ml 阅读(17) 评论(0) 推荐(0) 编辑
摘要:题目:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 中等 方法:动态规划 时间复杂度O(n) 空间复杂度O(n) 根据丑数的性质,目标丑数 = 某个小丑数 * 2/3/5 采用动态规划,对于丑数数组,每个数都需要乘2/3/5,故设定 阅读全文
posted @ 2022-08-01 21:57 Liang-ml 阅读(21) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示