
算法
触及到我的知识盲区了
go_flush
这个作者很懒,什么都没留下…
展开
-
计算字符串的编辑距离(python)
编辑距离python原创 2022-06-27 14:21:09 · 2184 阅读 · 0 评论 -
python括号生成(leetcode)
正整数n代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且有效的括号组合。动态规划代码如下:class Solution: def generateParenthesis(self, n): def gen(rightSymbol, leftSymbol, path, res): if leftSymbol < rightSymbol or rightSymbol > n or leftSymbol > n: # 左括.原创 2021-12-05 21:25:59 · 368 阅读 · 0 评论 -
python泰波那契序列(leetcode)
泰波那契序列Tn定义如下:t0 = 0, t1 = 1, t2 = 1, 且在n >= 0 的条件下tn+3 = tn + tn+1 + tn+2给你整数n,请返回第n个泰波那契数tn 的值当前项等于前三项之和解法一 暴力递归代码如下:class Solution: def tribonacci(self, n: int) -> int: if n == 0: return 0 if n == 1 or n == 2.原创 2021-12-05 13:15:24 · 801 阅读 · 0 评论 -
python组合(leetcode)
给定两个整数n 和 k,返回范围[1,n] 中所有可能的k个数的组合。你可以按任何顺序返回答案。回溯代码如下:class Solution: def combine(self, n: int, k: int): path, result = [], [] def backtrack(start, n, k, path): if len(path) == k: result.append(path[:.原创 2021-11-25 23:35:10 · 579 阅读 · 0 评论 -
python矩阵置零(leetcode)
给定一个m x n 的矩阵, 如果一个元素为0,则将其所在的行和列所有元素都设为0,请使用原地算法。思路:使用一个列表记录等于零的坐标,然后进行替换class Solution01: def setZeroes(self, matrix): tmp = [] for i in range(len(matrix)): for j in range(len(matrix[0])): if matrix[i][.原创 2021-11-21 22:40:08 · 868 阅读 · 0 评论 -
python 多维数组转一维数组
二维转一维数组的方法很多,使用numpy ,sum 好多方法可以实现。例如:arr = [[1,2,3],[4,5,6]]# 方法一print([item for i in arr for item in i])# 方法二from functools import reduceprint(reduce(lambdax,y:x+y,arr))# 方法三print(sum(arr,[]))多维转一维def exchange_one_arr(item, res:list): .原创 2021-11-20 13:02:46 · 1820 阅读 · 0 评论 -
python 寻找两个正序数组的中位数(leetcode)
给定两个大小分别为m和n 的正序(从小到大)数组nums1 和nums2.请你找出并返回这两个正序数组的中位数。算法是时间复杂度应该为o(log(m*n))解法一使用python 的库函数解决class Solution1: def findMedianSortedArrays(self, nums1, nums2) -> float: nums1.extend(nums2) length = len(nums1) nums1.s.原创 2021-11-20 12:00:39 · 688 阅读 · 0 评论 -
python 检测大写字母(leetcode)
我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 “USA” 。单词中所有字母都不是大写,比如 “leetcode” 。如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。解法一使用python 字符串的原生方法class Solution01: def detectCapitalUse(self,word): return word.原创 2021-11-13 18:26:47 · 2129 阅读 · 0 评论 -
python 商品折扣后的最终价格(leetcode)
给你一个数组prices,其中prices[i] 是商店里第i件商品的价格。商店里正在进行促销活动,如果你要买第i件商品,那么你可以得到与prices[j]相等的折扣,其中j是满足j > i且prices[j] <= prices[i]的最小下标,如果没有满足条件的j,你将没有任何折扣。请你返回一个数组,数组中第i个元素是折扣后你购买商品i最终需要支付的价格。解法一思路遍历找到该数,然后减去折扣。代码如下:class Solution: def finalPrice.原创 2021-11-13 17:00:02 · 2253 阅读 · 0 评论 -
python 下一个更大的元素(leetcode)
给你两个没有重复元素的数组nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出nums1 中每个元素子在nums2 中的下一个比较大的值。nums1 中数字x 的下一个更大元素是指nums2 中对应位置的右边的第一个比x 的元素。如果不存在,对应位置输出-1。解法一遍历查找代码如下:class Solution1: def nextGreaterElement(self, nums1, nums2): res = [] .原创 2021-11-11 23:04:50 · 867 阅读 · 0 评论 -
颜色分类python(leetcode)
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。- 解法一思路: 哈希计数,拷贝回去。代码如下:class Solution: def sortColors(self, nums): countEle = {i: 0 for i in nums} for i in nums: co.原创 2021-11-08 23:31:15 · 846 阅读 · 0 评论 -
数组中每个数的最近的最小值(python)
给定一个不含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i] 小的位置,返回所有位置相应的信息。- 解法一普通解法,在当前位置往左和右分别遍历。- 代码如下class GetNearLessNoRepeat(object): def getNearLessNoRepeat(self,arr): res = [] for i in range(len(arr)): # left .原创 2021-11-07 11:07:20 · 441 阅读 · 0 评论 -
滑动窗口的最大值python (leetcode)
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值.解法一思路双指针,python 的写法class Solution: def maxSlidingWindow(self, nums, k: int): if not nums or k == 0: return nums res = [] for i in range(k, len(arr) + 1): res.app.原创 2021-11-06 18:24:34 · 250 阅读 · 0 评论 -
python 键盘行 (leetcode)
给你一个字符串数组words,只返回可以使用在美式键盘同一行的字母打印出来的单词。键盘如下图所示。美式键盘中第一行由字符"qwertyuiop" 组成第二行由字符 “asdfghjkl” 组成。第三行由字符 “zxcvbnm” 组成。解法一思路: 统计每一个单词的每一个字母是在同一行的计数是否与单词个数相等。如果相等则存入列表中。代码实现如下:class Solution: def findWords(self, words): key1 = "qwertyu.原创 2021-10-31 22:20:24 · 315 阅读 · 0 评论 -
全排列二 python (leetcode)
给定一个可包含重复数字的序列nums,按任意顺序返回所有不重复的全排列。递归,使用hash 计数去重代码如下:class Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: def permute(nums,start,end,res): if start == end: res.append(nums[:]) .原创 2021-10-31 19:27:32 · 216 阅读 · 0 评论 -
字串和子序列(python)
字符串的字串,就是和顺序相关的。子序列和顺序没有关系,对于一个字符来说可以要也可以不要。字串的实现class Substring(object): """字串""" def substring(self, str): length = len(str) res = [] for i in range(length): string = "" for j in range(i, len.原创 2021-10-31 15:31:40 · 437 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置(leetcode)
给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]示例1:nums = [5,7,7,8,8,10], target = 8- 解法一思路 : 记录目标值第一次出现的下标值,和目标值出现的次数。- 代码如下class Solution: def searchRange(self, nums, target): first = 0 c.原创 2021-10-27 22:46:38 · 3587 阅读 · 0 评论 -
python Excel表序号(leetcode)
给你一个字符串columnTitle,表示Excel 表格中的列名称,返回该列名称对应的序列号。代码如下:class Solution: def titletoNumber(self, columnTile): words = {chr(i + 65): i+1 for i in range(26)} res = 0 length = len(columnTile) for i in range(length): .原创 2021-10-14 22:17:58 · 293 阅读 · 0 评论 -
python多数元素(leetcode)
给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于[n/2]的元素,你可以假设数组是非空的,并且给定的数组总是存在多数元素。思路: 计数取出最大的,因为必然存在。class Solution: def majorityElement(self, nums): target = len(nums)//2 tmp = {} for i in nums: if i in tmp: .原创 2021-10-12 23:09:26 · 373 阅读 · 0 评论 -
python 电话号码的字母组合(leetcode)
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回给出数字到字母的映射如下(与电话按键相同)。注意1 不对应任何字母。class Solution: def letterCombinations(self, digits: str): """字母组合""" key = { '2': ['a', 'b', 'c'], '3': ['d', 'e', 'f'], .原创 2021-10-10 17:14:02 · 230 阅读 · 0 评论 -
python 中列表、栈和队列的互相转化
列表到队列class Queue: def __init__(self): self.arr = [] def push(self, num): """入队""" self.arr.append(num) def peek(self): if not self.arr: raise Exception("the Queue is empty") return self.arr原创 2021-10-07 12:36:58 · 1202 阅读 · 0 评论 -
一个数组,奇数位放奇数偶数位放偶数
一个长度为2n 的整数数组,里边有n 个偶数但是无序,要求奇数位放奇数,偶数位放偶数。代码实现如下class Soulation: def solve(self, arr): even_index, odd_index = 0, 1 even_num = 0 odd_num = 0 arr_len = len(arr) def is_even(num): if (num ^ 1) &.原创 2021-08-28 16:57:34 · 574 阅读 · 0 评论 -
KMP 算法旋转字符串
KMP算法- KMP 算法是一种改进的字符串匹配算法,其关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。字符串旋转 :给定两字符串A和B, 如果能将A 从中间某个位置分割为左右两部分(可以为空串),并将字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true.思路,把主串复制一部分拼接到后面,然后判断另一个字符串是否在里面。java codepublic class KMPRotate { public static boolea原创 2021-08-28 13:57:06 · 181 阅读 · 0 评论 -
水王数(java)
找出数组中元素出现次数超过一般的元素,存在返回该数,不存在返回-1.解法一使用hash统计词频,然后在判断次数public class SuperWater(public static int verfy(int[] arr) { if (arr == null || arr.length == 0) { return -1; } HashMap<Integer, Integer> map = new H.原创 2021-08-27 22:16:46 · 148 阅读 · 0 评论 -
无重复字符串的最长子串(leetcode)
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。思路:解法一 使用双指针。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: pre = cur = long_val = 0 length = len(s) if not length: return 0 while cur < length and pre <= cur.原创 2021-07-26 12:21:04 · 83 阅读 · 0 评论 -
删除链表的倒数第N个节点(leetcode)
给你一个链表,删除链表的倒数第n个节点,并且返回链表的头节点。思路, 快慢指针,先间隔n当快指针到头时,慢指针刚好到达倒数第n 个节点的位置。class ListNode: def __init__(self,x): self.val = x self.next = Noneclass Solution: def removeNthFromEnd(self,head:ListNode,n:int): if not head: return head slownode =.原创 2021-07-26 09:44:00 · 128 阅读 · 0 评论 -
有序数组的平方(leetcode)
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。思路利用python 的排序方法class Solution: def sortedSquares(self, nums): return sorted([i*i for i in nums])利用双指针,本来就有序,平方后会影响 负数的位置。class Solution: def sortedSquares(self, nums): .原创 2021-07-24 10:01:33 · 167 阅读 · 0 评论 -
计算日期到天数的转化(华为机试python)
根据输入的日期,计算是这一年的第几天。代码如下while True: days = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] day_nums = 0 try: year,mon,day = map(int,input().split()) except: break day_nums += days[mon - 1] + day if ye.原创 2021-07-23 10:23:52 · 266 阅读 · 1 评论 -
走方格的方案数(华为机试python)
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。思路 要么往右走,要么往下走,到边界只有一种走法。递归代码如下while True: try: m,n = map(int,input().split()) except: break def step(m,n): if n == 0 or m == 0: # 到达边界时,只有一种走法 return .原创 2021-07-22 23:10:35 · 726 阅读 · 0 评论 -
尼科彻斯定理(华为机试python)
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。例如:1^3=12^3=3+53^3=7+9+114^3=13+15+17+19输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。思路直接使用暴力法,枚举所有情况。超时。经过推算得出,加法表达式的第一个字母的通项是 n^2 - n + 1 。代码如下:def nkcsi(): while True: try: n = .原创 2021-07-22 22:02:14 · 1145 阅读 · 0 评论 -
完全数计算(华为机试python)
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。s输入n,请输出n以内(含n)完全数的个数。计算范围, 0 < n <= 500000思路 先判断是不是完全数,在计算个数代码如下:def perfect_total(): def perfect_.原创 2021-07-22 19:03:59 · 576 阅读 · 0 评论 -
配置文件恢复(华为机试python)
为了简化输入,方便用户,以“最短唯一匹配原则”匹配:1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;2、若只输入一字串,但本条命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command3、若输入两字串,则先匹配第一关键字,如果有.原创 2021-07-22 18:20:03 · 232 阅读 · 0 评论 -
查找两个字符串a,b 中的最长公共子串(华为机试python)
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。思路 拿出最短的所有子串,判断是否在最长的里面,在的话,更新长度和最长子串。代码如下:class Solution: def longestDupSubstring(self,s1,s2): s1_length,s2_lenght = len(s1),len(s2) if s1_lenght > s2_lenght: s1,s2 = s2,s1 length = 0 res = "".原创 2021-07-22 16:13:18 · 874 阅读 · 1 评论 -
合并两个有序链表(leetcode)
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。思路 谁小用谁创建一个节点,然后把节点挂起来。代码如下:class ListNode: def __init__(self,x): self.val = x self.next = Noneclass Solution: def mergeTwoLists(self,l1,l2): root = ListNode(None) cur = root while l1 and l2: if l.原创 2021-07-21 18:08:09 · 100 阅读 · 0 评论 -
字符异位词分组(leetcode)
给定一个字符串数组,将字母异位词组合在一起,字母异位词指字母相同但排列不同的字符串。思路 排序后字符串时相同的。代码如下class Solution: def groupAnagrams(self,strs): total,str_len = [],len(strs) for i in range(str_len ): if strs[i] == "-": continue item = [strs[i]] for j in range(i+1,str_le.原创 2021-06-22 17:40:28 · 149 阅读 · 0 评论 -
无重复字符的最长字串(leetcode)
给定一个字符串,请你找出其中不含有重复字符的最长字串的长度。思路双指针和哈希映射,存储字符出现的下标。当字符串重复时,更新第一个指针。代码如下:class Solution: def lengthOfLongestSubstring(self, s): tmp_dict = {} start, end, max_len = 0, 0, 0 for index, value in enumerate(s): if value in tmp_dict: if start .原创 2021-06-21 16:46:30 · 112 阅读 · 0 评论 -
解压报文(python)
解压报文 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限为了提升数据传输的效率,会对传输的报文进行压缩处理。输入一个压缩后的报文,请返回它解压后的原始报文。压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。" “输入描述:输入压缩后的报文:1)不考虑无效的输入,报文没有额外的空格,方括号总是符合格式要求的;2)原始报文不包含数字,所有的数字只表示重复的.原创 2021-06-19 08:34:44 · 4086 阅读 · 8 评论 -
解密犯罪时间
解密犯罪时间 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。""输入描述:形如HH:SS的字符串,表示原始输入输出描述:形如HH:SS的字符串,表示推理出来的犯罪时间示例1输入18:52输出18:55说.原创 2021-06-15 20:26:59 · 4171 阅读 · 9 评论 -
删除链表中重复的元素(leetcode)
存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每一个元素只出现一次。思路:升序,值相等,指向下下个元素。class Solution: def deleteDuplicates(self,head): if not head: return pre = head while head: nowval = head.val while head.next and head.next.val == nowval: head.原创 2021-06-14 20:52:31 · 144 阅读 · 0 评论 -
最小路径和(leetcode)
给定一个包含非负整数的mxn 网络grid,请找出一条从左上角到右上角的路径,使路径上的数字总和为最小。思路: 利用一个二维数组存储移动的最小数字之和。代码:class Solution: def minPathSum(self,grid): if not grid or not gird[0]: return 0 rows,cols = len(gird),len(grid[0]) dp = [[0]*cols for _ in range(rows)] dp[0][0] =.原创 2021-06-14 19:33:33 · 187 阅读 · 0 评论