算法刷题
文章平均质量分 57
青竹aaa
这个作者很懒,什么都没留下…
展开
-
向上取整的代码写法
如何实现向上取整例如,x / n 上取整,代码如下v = (x + (n - 1)) / n下取整呢?hahav = x / n 例题森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会原创 2021-04-04 21:02:33 · 3167 阅读 · 1 评论 -
动态规划经典问题:最长递增子序列长度
题目给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums =原创 2021-03-08 22:54:45 · 2310 阅读 · 0 评论 -
记录回溯法模板
例题给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]示例 2:输入:s = "a"输出:[["a"]]提示: 1 <= s.length <= 16 s 仅由小写英文字母组成来源:力扣(LeetCode)链接:https://leetcode-cn...原创 2021-03-08 21:29:46 · 160 阅读 · 0 评论 -
滑动窗口模板
int left = 0, right = 0;while (right < s.size()) { // 增大窗口 window.add(s[right]); right++; while (window needs shrink) { // 缩小窗口 window.remove(s[left]); left++; }}滑动窗口中用到了左右两个指针,它们移动的思路是:以右指针作为驱动,拖着左指针向.原创 2021-02-09 22:34:29 · 202 阅读 · 0 评论 -
leetcode1423. 可获得的最大点数,逆向思维+滑动窗口
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料题目描述几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。示例 1:..原创 2021-02-06 23:18:18 · 244 阅读 · 0 评论 -
dfs、bfs模板总结,供自己参考回忆
dfs模板:def dfs(参数): if 满足最终条件: return 标记已访问该节点 if 满足相关条件: dfs(参数)bfs模板:初始化一个队列queen将初始节点加入队列,并标记初始节点已访问def bfs(参数): white 队列不为空: 取队首节点并出队 if 满足相关条件: 相关节点入队 标记节点已访问 ...原创 2021-01-29 22:05:53 · 103 阅读 · 0 评论 -
并查集模板
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料目录不带权并查集 带路径压缩的代码模板带权并查集带路径压缩的代码模板例题解法不带权并查集 带路径压缩的代码模板class UF: def __init__(self, M): self.parent = {} self.si...原创 2021-01-15 20:27:39 · 134 阅读 · 2 评论 -
三指针法,LeetCode 264. 丑数 II
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料编写一个程序,找出第 n 个丑数。丑数就是质因数只包含 2, 3, 5 的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明: 1 是丑数。 n 不超过1690。算法: 预计算 1...原创 2021-01-11 17:03:15 · 86 阅读 · 0 评论 -
快速幂
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3..原创 2020-12-26 00:14:08 · 125 阅读 · 1 评论 -
python3多种方式实现后序遍历
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [3,2,1]第一种递归# Definition for a binary tree node.# class TreeNode:# def ...原创 2020-12-07 16:44:36 · 386 阅读 · 0 评论 -
python3多种方式实现中序遍历
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料给你二叉树的根节点 root ,返回它节点值的前序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]第一种递归# Definition for a binary tree node.# class TreeNode:# def __init_...原创 2020-12-07 16:09:56 · 1371 阅读 · 0 评论 -
python3多种方式实现前序遍历
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料给你二叉树的根节点 root ,返回它节点值的前序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]第一种递归# Definition for a binary tree node.# class TreeNode:# def __init__(s...原创 2020-12-07 15:55:19 · 1210 阅读 · 0 评论 -
python3实现快速排序
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料算法描述快速排序(quick-sort)与归并排序(merge-sort)一样,使用了分治思想。下面是对一个一般的子数组A[p~r]进行快速排序的分治步骤:① 分解:数组A[p~r]被划分为两个子数组A[p~q]和A[q+1~r],使得 A[q] 大于等于 A[p~q] 中的每个元素,且小于等于 A[q+1~r] 中的每..原创 2020-12-06 23:47:29 · 306 阅读 · 0 评论 -
python3实现堆排序
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料把所有排序算法手动实现一遍系列,为方便回顾,记录于此# 自上而下调整堆def maxHeapify(arr, i, size): left = 2 * i + 1 right = 2 * i + 2 largest = i if left < size and arr[largest..原创 2020-11-26 11:16:01 · 127 阅读 · 0 评论 -
python3:递归解汉诺塔问题
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料问题在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上..原创 2020-11-22 21:38:06 · 254 阅读 · 1 评论 -
Python 的缓存机制: functools.lru_cache
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料使用functools模块的lur_cache装饰器,可以缓存最多 maxsize 个此函数的调用结果,从而提高程序执行的效率,特别适合于耗时的函数,也就是说对于相同的计算不会再重复计算,直接在缓存中取出值,像动态规划中的数组,存储好已计算的值,为将来直接使用,适用于递归。参数maxsize为最多缓存的次数,如果为None,则无..原创 2020-11-22 20:52:32 · 643 阅读 · 1 评论 -
BFS:二叉树的层序遍历(按层次记录)
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]...原创 2020-11-19 21:05:32 · 902 阅读 · 0 评论 -
DFS算法: 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。输入: 1/ \2 3\ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-paths著作权归领扣网络所有。商业转载请联系官方授权,非商业...原创 2020-11-16 21:12:42 · 472 阅读 · 0 评论 -
leetcode根据身高重建队列,python3实现
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例输入:[[7,0], [4,4], [7,1],..原创 2020-11-16 16:27:38 · 524 阅读 · 0 评论 -
DFS算法1:颜色填充
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的横坐标为 sr 纵坐标为 sc。需要填充的新颜色为 newColor 。「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的若干元素。请用新颜色填充初始坐标点的周围区域,并返回..原创 2020-11-12 14:34:08 · 422 阅读 · 1 评论 -
python实现判断是否为平衡二叉树
此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间目录平衡二叉树思路平衡二叉树任意结点的左右子树高度之差的绝对值不大于1的树空树为平衡二叉树示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \...原创 2020-11-05 12:34:10 · 1451 阅读 · 4 评论 -
python中的列表嵌套,x[:,1]与x[1,:]的含义
假设有列表如下:data_list =[[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000],[10000,20000,30000]]print("data_list:"),输出的结果如下[[1, 2, 3], [10, 20, 30], [100, 200, 300], [1000, 2000, 3000], [10000, 20000, 30000]]使用numpy转化为数组import numpy as npdata_list原创 2020-10-15 21:48:40 · 1361 阅读 · 0 评论 -
设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符
设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。示例:输入: a = 1, b = 1输出: 2提示: a, b 均可能是负数或 0 结果不会溢出 32 位整数解题思路首先左移和右移的区别是很好区分的左移<< :就是该数对应二进制码整体左移,左边超出的部分舍弃,右边补零。举个例子:253的二进制码1111 1101,在经过运算253<<2后得到1111 0100。很简单右移>> :该数对应的二进制码整体右移,左...原创 2020-10-08 15:31:04 · 877 阅读 · 0 评论 -
给定一个整数,编写一个函数来判断它是否是 2 的幂次方(位运算求解)
话不多说,看题,记录3种解法给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16示例 3:输入: 218输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/power-of-two常规解法class Solution: def isPowerOfTwo(self,原创 2020-10-08 14:41:27 · 1154 阅读 · 0 评论 -
python 排序 sorted多条件排序
python 排序 sorted 如果第一个条件 相同 则按第二个条件排序怎样遍历一个list 符合下列条件1. 按照元组的第一个从小到大排序2. 如果第一个相同 则按照元组第2个从大到小 排序a=[[2,3],[4,1],(2,8),(2,1),(3,4)] b=sorted(a,key=lambdax:(x[0],-x[1])) printb a=[[2,{'a':8}],[4,{'a':1}],(2,{'a':8}),(2,{'a':1}),(3,{'a':4...原创 2020-10-05 17:10:34 · 5770 阅读 · 1 评论 -
leetcode数组的相对排序(数组arr1的排序规则为arr2的元素顺序)
本题来自leetcode,记录一下python3对此类问题的解法。给你两个数组,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,...原创 2020-10-05 15:55:59 · 1037 阅读 · 0 评论 -
python sorted函数
使用python对列表(list)进行排序,说简单也简单,说复杂也复杂,我一开始学的时候也搞不懂在说什么,只能搜索一些英文文章看看讲解,现在积累了一些经验,写在这里跟大家分享,我们通过例子来详细解释一下函数sorted的具体用法: 先创建一个列表a ...原创 2020-10-05 14:49:56 · 291 阅读 · 2 评论 -
python zip函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。>>>a = [1,2,3]>>> b = [4,5,6]>>> zipped = zip(a,b) # 打包为元组的列表[(1, 4), (2, 5), (3, 6)]如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。>>>a = [1,2,3]原创 2020-10-05 11:25:41 · 124 阅读 · 0 评论 -
牛客网分解质因数
题目:牛客网https://www.nowcoder.com/practice/20426b85f7fc4ba8b0844cc04807fbd9?tpId=40&tqId=21338&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking首先讲一下如何判断一个数是质数,传统的做法是将数n一直...原创 2020-03-02 21:18:30 · 585 阅读 · 0 评论