- 博客(230)
- 资源 (6)
- 收藏
- 关注
原创 AtCoder Regular Contest 146 C Even XOR题解
AtCoder Regular Contest 146 C Even XOR 题解
2022-08-23 00:59:03 948 1
原创 AtCoder Regular Contest 146 B Plus and AND
AtCoder Regular Contest 146 B题 Plus and AND 题解
2022-08-21 15:38:56 431
原创 python vscode简易教程
python 环境python 解释器安装:https://www.runoob.com/python/python-install.htmlmac一般自带的有python 2的解释器。visual studio code 下载安装简称:vscode官网:https://code.visualstudio.com找到对应OS的版本并下载,按照默认配置安装即可。运行第一个python脚本运行一些轻量级的项目是没有问题的。1插件安装插件库中安装对应插件:只需要安装一个python 插件
2021-09-15 22:37:31 816
原创 Codeforces Global Round 16 题解
E. Buds Re-hanging题意:给出一棵多叉树,定义一种节点称之为“树芽”。其条件为:不是根节点至少含有一个子节点所有的子节点都为叶子节点。现在可以进行一种操作:将”树芽“节点及其所有子节点嫁接到其他节点上。问:如果可以进行任意次上述操作时,树上最终保留的叶子节点最小个数是多少?题解:首先,明确一点:当一次嫁接后,如果产生一个新的“树芽”节点,那么新产生的“树芽”节点也可以进行嫁接操作。思路:如果期望最终叶子节点最少。那么将有效的方式是将“树芽”节点嫁接到一个叶子节点上
2021-09-13 23:59:40 263
原创 AtCoder Beginner Contest 214题解
D - Sum of Maximum Weights题意:给出一个树,包含n个节点,n-1条边,每条边有一个权重wi。记f(u,v)为点u到点v的最短路径上出现的最大的权重,求n个点两两之间的f(u,v)之和。题解:假设有两个树,两个树之间通过一个权重为w的边连接,且两个树中的边的权重都小于w,那么此时满足f(u,v)==w的点对个数就有size(tree1)*size(tree2) .根据上述假设,我们可以按照边权重大小重新加边来哦构造这颗树,在构造过程中就能够得知有多少个点对是满足f(u,v)
2021-08-15 10:13:15 353
原创 Codeforces Round #737 (Div. 2) 题解
C Moamen and XOR题意:构造一个长度为n的数组,其中第i个元素为a[i],且对所有的i∈[0,n-1],满足0=<a[i]<2^k。问有多少种构造方法使得:a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕an结果对1e9+7取模。题解:按数位去分析,这里先定义几个变量:i:当前位 为从小到大的第i位。AND:所有数的第i位(当前位)相与后的值。XOR:所有数的第i位(当前位)异或后的值。DP[I] :从第0位到i位(即a[
2021-08-12 00:17:44 185
原创 牛客网小白月赛34题解
A dd爱科学1.0题意:给出一个字符串,问最少修改多少个字母使得该字符串为非递减字符串?题解:动态规划。原问题的子问题:最少修改多少个字母使得前i个字符形成的字符串为非递减序列,且保证最后一个字符为j。定义:dp[i][j] 保证前i个字符串为非递减且最后一个字符为j的最少修改次数转移方程:当s[i] != j时即第i个字符不是j时,需要将s[i]个改成字符j再加上min(dp[i-1][k])。min(dp[i-1][k])表示前i-1个字符形成非递减且最大字符小于等于j的最少修改
2021-05-29 10:20:30 1245 5
原创 剑指offer 65 至 剑指offer 68 - II 题解
剑指 Offer 65. 不用加减乘除做加法题意:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。题解:先思考两个正数相加。a+b 在二进制下一共只有四种情况 + 进位情况。0 + 0 = 00 +1 = 1 + 0 = 11+ 1 = 0 进位1很容易得出,加法后本位结果就是异或的结果,而是否进位的结果是相与的结果。所以a+b = (a^b)+(a&b)<<1.很容易就能够写出递归表达式。while b !
2021-05-19 15:44:24 181 5
原创 剑指offer59 - II 至 剑指offer 64 题解
剑指 Offer 59 - II. 队列的最大值题意:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。题解:解法1:暴力(240ms)队列的插入删除就使用原有队列的插入删除操作,查询最大值时暴力查找。解法2:队列+双向队列(324ms)一个普通队列用来正常存放元素,并进行插入删除操作,另一个双向队列用来记录最大值。双向队列的维护要求:内部非递增,插入数据时,从双向队列尾部
2021-05-19 10:53:54 127
原创 剑指 Offer 59 - I. 滑动窗口的最大值
题目链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/题意:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值题解:求最大值,原本想用大顶堆去做的,但是python里好像自己没实现大顶堆只有小顶堆。所以将所有的值取负,转换为求最小值问题。利用两个小顶堆实现:一个小顶堆用于存储区间内的最小值,一个小顶堆用于存储已不在区间内但还未从前一个小顶堆中删除的值在每次移动窗口时,
2021-05-19 08:55:48 137
原创 剑指 Offer 57 至 58 - II 题解
剑指 Offer 57. 和为s的两个数字题意:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。题解:双指针。利用数组有序性,可以通过双指针达到一次遍历出结果的目的。记左右指针分别为i,j。分别指向数组最小元素最大元素。每次向右移动左指针i时,都调整右指针j直至左右指针指向元素之和小于等于target。代码:class Solution: def twoSum(self, nums: List[int],
2021-05-18 13:36:40 136
原创 剑指 Offer 56 - I 至 56 - II 数组中数字出现的次数 I && II 题解
剑指 Offer 56 - I. 数组中数字出现的次数题意:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。题解:面试常考题。最原始版本(最简单版本):一个整型数组 nums 里除一个数字之外,其他数字都出现了偶数次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。根据异或的原理 a^b^a = b,a^a = 0。很容易得到整体异或后最终结果即为答案。
2021-05-18 12:33:50 126
原创 剑指 Offer 53 - I 至 55-II题解
剑指 Offer 53 - I. 在排序数组中查找数字 I题意:统计一个数字在排序数组中出现的次数。题解:二分查找,利用有序特性降低时间复杂度。代码:class Solution: def search(self, nums: List[int], target: int) -> int: l,r,ans = 0,len(nums)-1,0 while l<=r: mid =(l+r)//2 if
2021-05-18 12:00:59 142
原创 剑指 Offer 52. 两个链表的第一个公共节点
题目链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/题意:输入两个链表,找出它们的第一个公共节点。题解:经典面试题。解法:链表顺着走一遍,走法是当一个链表走到尾节点时,跳转到另一个链表的头节点。正确性:记两个链表的不重复部分的长度为lena和lenb,公共部分的长度为len。那么按照上述走法,两者走的长度分别为lena+len+lenb和lenb+len+
2021-05-18 10:43:26 82
原创 剑指 Offer 51. 数组中的逆序对
题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/题意:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。题解:解法1:暴力(TLE)两层遍历,找每个数字之后比其小的所有数字解法2:归并排序(1932 msms,28.2mb)利用归并排序中的归并过程。归并时记左区间指针为i,右区间指针为j。当nums[i]>nums[j]
2021-05-18 10:23:32 125
原创 剑指 Offer 50. 第一个只出现一次的字符
题目链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/题意:在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。题解:利用两个队列分别存储出现过一次的元素以及出现过多次的元素,遍历的时候维护。852ms利用字典去记录每个元素出现的次数,第二次遍历时遇到第一个出现次为1的元素即为答案。176 ms代码:#法一class Solution:
2021-05-18 09:16:49 115 2
原创 剑指 Offer 49. 丑数
题目链接:https://leetcode-cn.com/problems/chou-shu-lcof/题意:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数题解:只包含质因子2,3,5叫做丑数。丑数可以表示为2x ×\times× 3y ×\times× 5z。所以只需在已有的丑数不断地乘以2、3、5即可得到新的丑数。那么要找到第n大的丑数,则需要不断取最小的即可。做法:设置三个队列分别用于存放可乘以的丑数序列每次比较每
2021-05-18 09:16:38 105 2
原创 剑指 Offer 48. 最长不含重复字符的子字符串
题目链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/题意:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。题解:利用python里的字典,记录每个字符上次出现的位置以及区间起始位置,遍历的过程中注意更新维护即可。代码:class Solution: def lengthOfLongestSubstring(self, s:
2021-05-18 09:16:27 97
原创 剑指 Offer 47. 礼物的最大价值
题目链接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/题意:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?题解:动态规划。dp[i][j]表示到达第i行第j列最多能拿多少价值的礼物。初始化:dp[i][j]=0全为0
2021-05-18 09:16:13 98
原创 剑指 Offer 46. 把数字翻译成字符串
题目链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/题意:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。题解:动态规划。dp[i]表示前i个字符有多少种翻译方法;初始化:dp[0]=1转移方程:dp[i]
2021-05-18 09:15:55 150 2
原创 剑指 Offer 45. 把数组排成最小的数
题目链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/题意:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。题解:排序问题。排序方法:两个整型的大小,取决于其在合并时整体的大小。所以只需比较 a+b与b+a的大小即可。PS:Python3中sorted中若是需要自定义排序顺序需要用到functools.cmp_to_key(my_compare
2021-05-17 15:32:35 89
原创 剑指 Offer 44. 数字序列中某一位的数字
题目链接:https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/题意:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字题解:数学思路:先找出第n位对应的是几位数字再找出第n位对应的是那个数值最后找到第n为对应的是那个数字代码:cla
2021-05-17 15:14:58 82
原创 剑指 Offer 43. 1~n 整数中 1 出现的次数
题目链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/题意:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数题解:数学解法:记录每个数位上1可能出现的次数,最后求和即可。分三种情况:(记当前位的数字为cur,高位为high,低位为low,digit为当前数字占的位置的基数,例如1234,假设分析十位上的1出现的次数时cur为3,high为12,low为4,digit为10
2021-05-17 14:36:31 162 2
原创 剑指 Offer 42. 连续子数组的最大和
题目链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/题意:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。题解:遍历一次,当当前子区间的和小于0则舍弃掉当前子区间,新开一个区间。过程中维护最大值即可。注意最大值初始化代码:class Solution: def maxSubArray(self, nums: List[int
2021-05-17 14:12:34 55 1
原创 剑指 Offer 41. 数据流中的中位数
题目链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/题意:得到一个数据流中的中位数题解:解法1:双顶堆经典解法:大顶堆存放小的一半元素,小顶堆存放大的一般元素。询问中位数时从两个堆的堆顶元素可以得出。在加入元素时,需要不断平衡两个堆的元素个数基本持平(差距不超过1)即可。解法2:二分插入思路与解法1一样,都是通过二分去降低查询的时间复杂度。做法是在添加元素时,利用二分插入使得整体元素有序,
2021-05-17 14:05:43 113
原创 剑指 Offer 40. 最小的k个数
题目链接:https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/题意:输入整数数组 arr ,找出其中最小的 k 个数题解:最容易想到的方法:排序代码:class Solution: def getLeastNumbers(self, arr: List[int], k: int) -> List[int]: return sorted(arr)[:k]...
2021-05-17 13:25:52 68
原创 剑指 Offer 39. 数组中出现次数超过一半的数字
题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/题意:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字题解:经典面试题之一。最佳解法: 理论:该数字超过数组的一半,也就是他比其他任何数字的数量之和都要多。记该数字为A,其余数字为B,所以假设一个A可以抵消掉一个B,那么抵消到最后剩下的肯定还是
2021-05-17 13:20:59 69
原创 剑指 Offer 38. 字符串的排列
题目链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/题意:输入一个字符串,打印出该字符串中字符的所有排列。题解:先将给定的字符串按照字典序排列后,就变成了下一个全排列问题。找下一个全排列的思路:从排列尾端找一个非递增序列s(例如:“abedc”中为“edc”),很明显已经无法在这个非递增序列s上通过改变顺序去找到下一个比它大的序列,所以需要将非递增序列s的前一个字符记为x(例如:“abedc”中“b”)加进来,重
2021-05-17 13:00:03 81
原创 剑指 Offer 37. 序列化二叉树
题目链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/题意:实现两个函数,分别用来序列化和反序列化二叉树。题解:序列化:广度优先搜索,来层次遍历并转换为对应的字符串即可。为空时转换为‘null’反序列化:序列化的结果即为层次遍历的结果,难点在于如何构建树上节点的左右指向。可以利用队列按顺序记录节点,这样在顺序遍历序列化结果时,也可以同步知晓其父节点,就可以很容易的解决左右子树指向问题。代码:# Definiti
2021-05-17 11:02:51 113 7
原创 剑指 Offer 36. 二叉搜索树与双向链表
题目链接 :https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/题意:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。返回指向最小节点的指针。题解:二叉搜索树得到有序序列的方法:中序遍历构建双向链表:cur.left,pre.right=pre,cur所以最终需要在中序遍历的过程中去重复调整节点指向即可。中序遍
2021-05-17 09:49:50 69
原创 剑指 Offer 35. 复杂链表的复制
题目链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/题意:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。题解:拼接+拆分:需要三次遍历。第一次遍历:将链表上所有的节点的val以及next复制一遍。并按照原->新->原->新->..进行拼接。
2021-04-27 15:30:07 68 2
原创 剑指 Offer 34. 二叉树中和为某一值的路径
题目链接:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/题意:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。题解:找出从根节点到叶节点的一条路,且路径上的值的总和等于target。深度优先搜索。代码:# Definition for a binary tree node.# class
2021-04-27 14:33:10 83
原创 剑指 Offer 33. 二叉搜索树的后序遍历序列
题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/题意:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false题解:法一:递归求解利用后序遍历的特点(左、后、根)以及二叉搜索树的特点(左子树<=根<=右子树)求解。后序遍历中,最后一个点为根节点,利用大小比较,很容易将左右子树分隔出来。若是有多余的不符合特征的
2021-04-21 14:40:51 75
原创 剑指 Offer 32 - III. 从上到下打印二叉树 III
题目链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/题意:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。题解:法一:和之前按顺序输出一样,只不过在返回时,按照题目要求将个别列表给翻转一下即可。法二:在层次遍历时,按照题目要求去将新的点添加在队列的合适位置即可。代码:# D
2021-04-21 14:21:26 91
原创 剑指 Offer 32 - II. 从上到下打印二叉树 II
题目链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/题意:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。题解:与 I 类似的层次遍历,不过要注意遍历的时候顺便记录层数。代码:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):#
2021-04-20 14:37:13 70
原创 剑指 Offer 32 - I. 从上到下打印二叉树
题目链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/题意:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。题解:层次遍历。利用队列存储节点,按层次进行遍历即可。代码:class Solution: def levelOrder(self, root: TreeNode) -> List[int]: if root == None:
2021-04-19 20:03:50 61
原创 剑指 Offer 31. 栈的压入、弹出序列
题目链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/题意:给出入栈顺序以及出栈顺序,问有没有可能是这种出栈顺序?题解:模拟栈的入栈出栈操作。出栈顺序与入栈顺序都从第一个元素开始遍历若是未进栈元素与当前出栈元素相同,则继续向下匹配;若是未进栈元素与当前出栈元素不相同,则判断栈顶元素与当前出栈元素是否相同:若相同则出栈且继续向下匹配若不同则表示此种出栈顺序不合理。代码:class Sol
2021-04-19 18:20:25 77
原创 剑指 Offer 30. 包含min函数的栈
题目链接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/题意:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)题解:栈用python 里的list代替,出栈用pop(-1),进栈用append(x)自定义的栈里再用另一个list来维护栈中最小值,其中mistack[i]表示栈中前i个元素中最小的元素值代码:cla
2021-04-19 17:07:45 134 1
原创 剑指 Offer 29. 顺时针打印矩阵
题目链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/题意:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。题解:模拟题目,注意控制条件即可。到边界时转向,遇到已经输出的元素也转向。代码:class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: ret = []
2021-04-19 16:52:22 68
原创 剑指 Offer 28. 对称的二叉树
题目链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/题意:判断一棵二叉树是不是对称的题解:二叉树递归判断,只需要判断:左子树的左子树是否与右子树的右子树相同左子树的右子树是否与右子树的左子树相同面试中遇到过此题。代码:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):#
2021-04-19 16:33:27 72
saolei_c_c++_v1.zip
2020-12-10
西北工业大学_数字图像处理实验.zip
2020-06-22
西北工业大学软件学院网络与分布计算实验二(http)
2019-12-11
西北工业大学软件学院网络与分布计算实验二
2019-12-11
西北工业大学项目管理与组织复习资料(安格全).zip
2019-11-13
西北工业大学项目管理与组织复习资料(安格全).zip
2019-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人