- 博客(49)
- 收藏
- 关注
原创 【思特奇杯·云上蓝桥-算法集训营】结营
门牌制作res = 0for i in range(1, 2021): a = list(str(i)) res += a.count('2')print(res)624即约分数total=0def f(a,b): x = a % b while (x != 0): a = b b = x x = a % b return bfor i in range(1,2021): for j in range(1,2021): if f(i,j)==1:
2022-01-24 19:58:35
307
原创 【思特奇杯·云上蓝桥-算法集训营】第3周
1.斐波那契数列class Solution: def fib(self, n: int) -> int: if n < 2: return n p, q, r = 0, 0, 1 for i in range(2, n + 1): p, q = q, r r = p + q return r2. 第 N 个泰波那契数class Solutio
2022-01-23 22:04:29
466
原创 【思特奇杯·云上蓝桥-算法集训营】第2周
1.带分数a = input()a_num = int(a)count = 0for i in range(int('9'*(5-len(a))), int('9'*(6-len(a)))): for n in range(1, a_num): stra = str(n) + str((a_num - n)*i) + str(i) for j in range(9): if str(j+1) not in stra:
2022-01-16 08:31:13
332
原创 374. 猜数字大小
374. 猜数字大小解题思路二分查找代码 def guessNumber(self, n: int) -> int: st, sp = 1, n while st < sp: mid = (st + sp) // 2 if guess(mid)<= 0: sp = mid else: st = mid + 1
2021-10-31 11:04:44
76
原创 392. 判断子序列
392. 判断子序列解题思路使用双指针进行判断,当遇到不同元素时长指针加一,否则长短指针均加一。代码 def isSubsequence(self, s: str, t: str) -> bool: if s == '': return True ps = 0 pt = 0 while ps < len(s) and pt < len(t): if s[ps] ==
2021-10-31 11:00:11
76
原创 232. 用栈实现队列
232. 用栈实现队列解题思路使用两个栈来回倒,一个栈表示入队的,一个栈表示出队的。代码class MyQueue: def __init__(self): self.stack_in = [] self.stack_out = [] def push(self, x: int) -> None: self.stack_in.append(x) def pop(self) -> int: if s
2021-10-31 10:54:49
79
原创 242. 有效的字母异位词
242. 有效的字母异位词解题思路使用一个大小为26的数组来存放单词数量,数组下标对应不同字母代码 def isAnagram(self, s: str, t: str) -> bool: li = [0] * 26 for i in s: li[ord(i)-97] += 1 for j in t: li[ord(j)-97] -= 1 return li == [0]*26
2021-10-31 10:50:25
64
原创 190. 颠倒二进制位
190. 颠倒二进制位解题思路简单的位运算便可实现,1或1=1,1或0=01 或 1=1,1或0=01或1=1,1或0=0代码 def reverseBits(self, n: int) -> int: # 位运算 ans = 0 for i in range(32): ans = (ans << 1) + (n & 1) n >>= 1 ret
2021-10-31 10:45:47
62
原创 724. 寻找数组的中心下标
724. 寻找数组的中心下标解题思路数学问题,通过找规律得到解题方式,设数组和为total,第i个元素的左侧元素和为sum,则当2∗sum+nums[i]=total2*sum+nums[i]=total2∗sum+nums[i]=total时左右侧元素相等。代码 def pivotIndex(self, nums: List[int]) -> int: total = sum(nums) sum_l = 0 for i in range(
2021-10-30 20:54:55
91
原创 766. 托普利茨矩阵
766. 托普利茨矩阵解题思路使用暴力法破解,又题目定义可以知道当矩阵的每个元素都与其左上角元素相等的情况下,该矩阵为托普利茨矩阵。所以直接遍历该矩阵,将每一个元素和它左上角的元素相比对即可。代码 def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool: row = len(matrix) column = len(matrix[0]) cur_r = 0 cu
2021-10-30 20:45:16
157
原创 125. 验证回文串
125. 验证回文串解题思路验证回文串最直接的方法就是使用栈来进行判断,先将字符入栈,再出栈与原字符相比较。还可以使用双指针,一个指针从头开始,一个指针从尾开始,直到两指针相遇,如果遇到不相同的则不是回文串。代码 def isPalindrome(self, s: str) -> bool: if s is None: return True s = s.lower() # 使用栈 # stack
2021-10-30 20:40:48
106
原创 58. 最后一个单词的长度
58. 最后一个单词的长度解题思路先将字符串按空格分开,放到列表中,再计算列表的最后一个元素的长度。代码def lengthOfLastWord(s: str) -> int: x = s.split(' ') for i in x[::-1]: if i != '': return len(i) return 0运行结果...
2021-10-29 20:00:21
74
原创 28. 实现 strStr()
28. 实现 strStr()解题思路暴力匹配,在长字符串中通过匹配短字符串长度的字符来得到。代码def find(haystack, needle): # 暴力解法 if needle is None: return 0 if len(haystack) < len(needle): return -1 i, j = 0, 0 for i in range(len(haystack)): if hayst
2021-10-29 19:53:24
85
原创 最长上升子序列
最长上升子序列题目描述:给你一个整数数组 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-07-13 21:03:41
85
原创 Numpy广播(Boradcasting)
广播是一种强大的机制,它允许NumpyNumpyNumpy在执行算术运算时使用不同形状的数组。通常,我们有一个较小的数组和一个较大的数组,我们希望多次使用较小的数组来对较大的数组执行一些操作。举个例子:import numpy as np# 要将x的每行都与v相加x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])v = np.array([1, 0, 1])y = x + v # 使用广播将v添加到x的每一行print(y) # P
2021-02-10 10:51:35
459
1
原创 Numpy布尔数组索引
布尔数组索引: 布尔数组索引允许选择数组的任意元素。通常,这种类型的索引用于选择满足某些条件的数组元素。下面是一个例子:import numpy as npa = np.array([[1,2], [3, 4], [5, 6]])# 找出a中大于2的元素;这将返回一个与a相同形状的布尔值的numpy数组,其中的bool_idx的每个槽将告诉a的元素是否为> 2。bool_idx = (a > 2)print(bool_idx) # Prints "[[False Fal
2021-02-09 18:28:30
1990
原创 Numpy整数数组索引
使用切片索引到Numpy数组时,生成的数组视图始终是原始数组的子数组;而整数数组索引可以使用另一个数组中的数据构造任意数组。import numpy as np# 创建一个数组a = np.array([[1,2], [3, 4], [5, 6]])# 下面这行代码将返回一个形状为(3, )的数组[1 4 5]print(a[[0, 1, 2], [0, 1, 0]])"""当给定一个2D数组时,Numpy索引的工作原理如下:输入一个行索引列表,然后输入一个列索引列表。从语义上讲,第一个索
2021-02-09 18:11:00
3317
1
原创 并查集基本实现
并查集概念并查集(Disjointset或Union−findsetDisjoint set 或 Union-find setDisjointset或Union−findset)是一种树形的数据结构,常用于处理一些不相交集合的合并及查询问题。主要包含以下两种操作:查询(FindFindFind):查询某个元素在哪个集合里合并(UnionUnionUnion):合并两个元素所在的不同的集合...
2021-01-18 15:37:45
181
2
原创 递归的应用——汉诺塔
中国大学MOOC,数据结构与算法(Python版)学习笔记课程网址:“https://www.icourse163.org/course/PKU-1206307812”问题描述汉诺塔问题是法国数学家于1883年,根据传说提出来的。传说在一个印度教寺庙里,有3根柱子,其中一根套着64个由小到大的黄金盘片,僧侣们的任务就是要把这一叠黄金盘从一根柱子搬到另一根,但有两个规则:一次只能搬1个盘子,大盘子不能叠在小盘子上。解决思路假设我们有5个盘子,穿在1#柱,需要挪到3 #柱;如果能有办法把最.
2020-12-31 16:00:03
190
1
原创 递归(上)
中国大学MOOC,数据结构与算法(Python版)学习笔记课程网址:“https://www.icourse163.org/course/PKU-1206307812”什么是递归递归是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出奇简单,令人赞叹。初识递归:数列求和只是一个很简单.
2020-12-30 17:04:43
126
原创 基本结构——队列
队列及其Python实现什么是队列:队列是一种有次序的数据集合,其特征是新数据项的添加总发生在一端(通常称为“尾rear”端)而现存数据项的移除总发生在另一端(通常称为“首front”端)。当数据项加入队列,首先出现在队尾,随着队首数据项的移除,它逐渐接近队首。新加入的数据项必须在数据集末尾等待,而等待时间最长的数据项则是队首这种次序安排的原则称为(FIFO:First-infirst-out)先进先出或“先到先服务first-come first-served”队列的例子出现在我们日常生活的方
2020-12-29 16:18:52
288
原创 基于百度AI开放平台及图灵机器人搭建的聊天机器人
一. 准备工作:首先应该了解一下百度开放平台的语音识别及语音合成的调用方法,详见我之前的这篇文章;语音输入及输出准备好之后就需要考虑中间的机器人对话环节,我使用的是图灵机器人来实现这个环节的图灵机器人官网,这个需要实名认证后才能白嫖,这个认证说实话挺慢的(我大概等了差不多一个礼拜才认证好,应该不是我的问题????????),准备好图灵机器人后就可以实现(憨批)聊天机器人了。二. 具体实现:1-语音输入:先使用pyaudio录制适合百度语音识别的音频import wavefrom pyaudio
2020-12-28 17:02:23
2734
2
原创 Git与Github入门实践(下)
Git与GitHub入门实践(实验楼)学习笔记学习网址:https://www.lanqiao.cn/courses/1035一. 多人协作Github部分本节将介绍 GitHub 多人协作与相关 Git 的操作,所有操作全部在浏览器页面上完成,内容相对较少。建议大家准备两个浏览器和两个 GitHub 账号以便模拟场景。我的账号 Chuntianlaile 是一个用来测试的账号,假定这是项目组长的账号,Manchangdx 是组员的账号。(一)创建仓库首先,在组长账号中创建一个仓库,名为 w.
2020-12-25 20:30:09
272
原创 Git与Github入门实践(中)
Git分支操作(一)添加SSH关联授权上一节操作中每次提交都要手动输入用户名和密码,若想避免这些麻烦,可以在系统中创建 SSH 公私钥,并将公钥放到 GitHub 指定位置。如此操作即可生成 GitHub 账户对于当前系统中的 Git 授权。终端执行 ssh-keygen 命令按几次回车生成公私钥,公私钥存放在主目录下的隐藏目录 .ssh 中的两个文件中:将 ~/.ssh/id_rsa.pub 文件中的公钥内容复制出来。然后在 GitHub 网页上添加公钥:Title 自定义,把剪切板中的内
2020-12-25 17:12:45
111
原创 Git与Github入门实践(上)
Git与GitHub入门实践(实验楼)学习笔记学习网址:https://www.lanqiao.cn/courses/1035一. Git与Github简介(一)Git与Github的来历Linux 之父 Linus 在 1991 年创建开源的 Linux 操作系统之后,多年来依靠全世界广大热心志愿者的共同建设,经过长足发展,现已成为世界上最大的服务器系统。系统创建之初,代码贡献者将源码文件发送给 Linus,由其手动合并。这种方式维持多年后,代码量已经庞大到人工合并难以为继,于是深恶集中式版本.
2020-12-25 14:52:56
646
原创 基本结构——栈
一. 什么是线性结构:线性结构是一种有序数据项的集合,其中每个数据项都有唯一的前驱和后继(除了第一个没有前驱,最后一个没有后继),新的数据项加入到数据集中时,只会加入到原有某个数据项之前或之后,具有这种性质的数据集,就称为线性结构。二. 栈(Stack):基本概念:栈就是一种有次序的数据项集合,是一种线性结构。在栈中 ,数据项的加入和移除都仅发生在同一端,这一端叫栈“顶(top)”,另一端叫栈“底(base)”。基本特点:离栈底越近的数据项,留在栈中的时间就越长,而最新加入栈的数据项会被最先移
2020-12-24 17:12:36
970
1
原创 算法分析
一. 什么是算法分析:程序和算法的区别:算法是对问题解决的分步描述程序则是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序算法分析主要就是从计算资源消耗的角度来评判和比较算法更高效利用计算资源,或者更少占用计算资源的算法,就是好算法计算资源指标:一种是算法解决问题过程中需要的存储空间或内存,但存储空间受到问题自身数据规模的变化影响,要区分哪些存储空间是问题本身描述所需,哪些是算法占用,不容易。另一种是算法的执行时间,我们可以对程序进行实际运行测试,获得
2020-12-23 15:27:40
2079
原创 百度API---语音识别及语音合成
百度API–语音识别首先打开百度的AI开放平台,然后点短语音识别进入后的页面是这样的,点击立即使用然后就直接点创建应用就可以了进入后是这个页面,按自己的要求填写就好了,然后就立即创建创建成功之后在应用列表里就可以看到这些东西,其中的AppID、API Key、Secret Key这三个数据是在调用API的时候要用到的。之后在技术文档里就能看到相关的相关的调用方式及一些参数等的说明。下面就是直接复制文档中的代码,直接用就可以了。from aip import AipSpeech"""
2020-12-19 14:39:54
2681
3
原创 LeetCode452.用最少数量的箭引爆气球
LeetCode452.用最少数量的箭引爆气球1.题目描述:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之
2020-12-17 14:20:46
73
原创 LeetCode242.有效的字母异位词
LeetCode242.有效的字母异位词1.题目描述:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。2.解题思路:直接用Python内置的collections库中的Counter函数来对字符串中的字母进行计数,然后再比较一下3.Python实现:
2020-11-24 21:45:42
62
原创 LeetCode283.移动零
LeetCode283.移动零1.题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.解题思路:先把原数
2020-11-20 21:30:10
67
原创 LeetCode1030.距离顺序排列矩阵单元格
LeetCode030.距离顺序排列矩阵单元格1.题目描述:给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的
2020-11-17 21:59:38
85
原创 LeetCode69.X的平方根
LeetCode69.X的平方根1.题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。2.解题思路:...
2020-11-16 21:25:50
75
原创 LeetCode922.按奇偶排序数组
LeetCode922.按奇偶排序数组1.题目描述:给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。提示:2 <= A.length <= 20000A.length % 2 == 00
2020-11-16 20:45:34
291
原创 LeetCode31.下一个排列
LeetCode31. 下一个排列1.题目描述:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输
2020-11-14 21:51:51
150
原创 LeetCode69.X的平方根
LeetCode69.x的平方根1.题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sqrtx2.解题思路:由于 x平方根的
2020-11-11 08:42:03
92
原创 LeetCode7.整数反转
Leetcode7.整数反转1.题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。2.解题思路:先将输入的数字的绝对值转换为字符串,之后进行字符串反转,如果是负数就在前面加“ -
2020-11-11 08:25:55
200
原创 LeetCode 1640.能否连接形成数组
LeetCode1640.能否连接形成数组1.题目描述:给你一个整数数组 arr ,数组中的每个整数 互不相同 。另有一个由整数数组构成的数组 pieces,其中的整数也 互不相同 。请你以 任意顺序 连接 pieces 中的数组以形成 arr 。但是,不允许 对每个数组 pieces[i] 中的整数重新排序。如果可以连接 pieces 中的数组形成 arr ,返回 true ;否则,返回 false 。示例 1:输入:arr = [85], pieces = [[85]]输出:true示例
2020-11-08 16:19:43
259
原创 LeetCode1356.根据数字二进制下 1 的数目排序
LeetCode1356.根据数字二进制下 1 的数目排序题目描述:给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例 1:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。[1,2,4,8] 都有 1 个 1 。[3,5,6] 有 2 个 1 。[7
2020-11-07 15:03:54
79
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人