![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
cxxx17
为什么可乐一定要加冰
展开
-
【刷题】表示数值的字符串
题目:请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。示例:输入:“123.45e+6”输出:True输入:“1.2.3”输出:False思路:思路1:直接使用python正则,判断字符串是否满足数字的格式;思路2:应用python float api,原创 2021-04-11 15:00:31 · 80 阅读 · 0 评论 -
【刷题】删除重复节点
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5示例:输入:{1,2,3,3,4,4,5}输出:{1,2,5}思路:加入两个指针 pre 和 last,pre指向当前确定不重复的节点,而last指针相当于工作指针,一直往后面搜索。常规情况:不存在重复时,pre 和 last都向后走一个;存在重复时,当重复节点的最后一次原创 2021-04-08 00:38:15 · 155 阅读 · 0 评论 -
【刷题】第一个只出现一次的字符
题目:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例:输入:“google”输出:4思路:应用字母的ASCII码,作为index,A-Z的ASCII码为65-90,a-z对应的ASCII码值为97-122,因此构建一个长度为58的List分别存各个字幕出现的次数,最后遍历字符串,遇见第一个次数为1的返回该index,否则返回-1。code:# -*- codin原创 2021-03-22 23:36:40 · 74 阅读 · 0 评论 -
【刷题】数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007对于50%50\%50%的数据,size≤104size\leq 10^4size≤104对于75%75\%75%的数据,size≤105size\leq 10^5size≤105对于100%100\%100%的数据,size≤2∗105size\leq 2*10^5size≤2∗105示例:原创 2021-03-12 00:44:52 · 136 阅读 · 0 评论 -
【刷题】归并排序 python
def merge_sort(array): if len(array)<2: return array mid = int(len(array)/2) low = 0 high = len(array)-1 return sort(merge_sort(array[low:mid]), merge_sort(array[mid:]))def sort(left, right): res = [] while left and原创 2021-03-12 00:06:27 · 104 阅读 · 0 评论 -
【刷题】机器人的运动范围
题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?示例:输入:5,10,10输出:21思路:从左上角开始移动,仅靠向左或向下移动即可遍历所有的点。遍历过的点加入set,同时用两个变量分别存储两个坐标各个数原创 2021-03-10 00:18:02 · 89 阅读 · 0 评论 -
【刷题】滑动窗口的最大值
题目:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,原创 2021-03-06 19:09:57 · 226 阅读 · 0 评论 -
【刷题】剪绳子 公式推导
题目:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例:输入:8输出:18思路:和为定值时,当各个数大致相等时,得到乘积的最大值。(类似的题目,给定三角形或矩形周长,求何时面积最大)假设一共 mmm 个数,每个数为 x=n/mx = n / mx=n/原创 2021-03-04 00:38:33 · 2310 阅读 · 1 评论 -
【刷题】把字符串转换成整数
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0示例:输入:"+2147483647"输出:2147483647输入:“1a33”输出:0思路:思路1,应用{str:int}字典,按位累加;思路二,应用ascii编码的距离得到各个位数上的数字。code:# 思路一import redef seqtonum(s): num = 0 seq2num = {'0':0, '1':1, '2':2, '3':3,原创 2021-03-03 00:57:01 · 126 阅读 · 0 评论 -
【刷题】不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。示例:输入:1,2输出:3思路:按位异或获得二进制相加结果,按位与得到进位结果,将相加的结果与进位继续相加,直至没有进位。(正数+负数 补码相加,依然可以沿用上述方法)code: if num1 == 0: return num2 if num2 == 0: return num1 else: w原创 2021-03-03 00:46:49 · 87 阅读 · 0 评论 -
【刷题】孩子们的游戏(圆圈中最后剩下的数)
题目:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这原创 2021-03-02 21:57:11 · 121 阅读 · 0 评论 -
【刷题】丑数 python
题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:所有丑数可以通过前面的丑数乘2、3、5得到,主要是要知道如何将这些数从小到大排序,以确定排在第N个位置的丑数。假设丑数序列是x0,x1,x2…xnx_{0}, x_{1}, x_{2} … x_{n}x0,x1,x2…xn, 那么下一个丑数一定是min(xi∗2,xj∗3,xk∗5)min(x_{i}*原创 2021-02-28 23:57:24 · 207 阅读 · 0 评论 -
【刷题】二进制中1的个数 python
题目:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。思路:一种是直接求补码,然后统计1的个数;另一种是通过n&(n-1)每次消除最低位的1,直至消除至0,所需要的消除次数即为1的位数。code:# 第一种# -*- coding:utf-8 -*-class Solution: def buma(self, n): result = [] if n >= 0: while n != 0:原创 2021-02-28 00:35:03 · 178 阅读 · 0 评论 -
【刷题】二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:二叉搜索树的特性是左子树上的结点的值小于根结点的值,根结点的值小于右子树结点的值。采用递归方法,使得节点按照顺序插入List,然后按照list中顺序更改指针方向。code:# -*- coding:utf-8 -*-class TreeNode: def __init__(self, x): self.val = x self.left原创 2021-02-27 16:08:22 · 65 阅读 · 0 评论 -
【刷题】按字典序输出全排列 python
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:字典序即该字符串的下个字符串保持尽可能长的前缀,并且下个字符串是拥有共同前缀的所有字符串中最小的;从右往左看,当遇到第一个降序的位置记为i-1,如123698754,从右往左看,在6出现的位置出现第一个降序,将6与i及之后的位置中最后一个比6大的数进行交换,在这个字符串中即是7, 将67 调换之后即得到123798原创 2021-02-27 14:31:34 · 1878 阅读 · 0 评论 -
【刷题】跳台阶 python
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。输入:1输出:1输入:4输出:5思路:一次只有两种跳法,要么跳一级,要么跳两级,假设 n 级台阶一共有 F(n)F(n)F(n) 种跳法,那么最后一次可能是跳了一级也可能是跳了两级,即 F(n)=F(n−1)+F(n−2)F(n) = F(n-1) + F(n-2)F(n)=F(n−1)+F(n−2),可以采用递归方法。# -*- coding:utf-8 -*-clas原创 2021-02-25 22:09:01 · 437 阅读 · 1 评论 -
【刷题】最小的k个数 python
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如输入:[4,5,1,6,2,7,3,8],4输出则为:[1,2,3,4]思路:排序,可以采用构建最小堆,重复k次,即找到了最小的个数,复杂度为k∗lognk*lognk∗logn# -*- coding:utf-8 -*-class Solution: def __init__(self): self.input = [] # 最小堆原创 2021-02-25 21:01:25 · 252 阅读 · 0 评论 -
【刷题】数据流的中位数 python
题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路:应用两个堆(一个最大堆,一个最小堆),分别存储一半的数,最大堆存储小一半的数,最小堆的存储大一半的数,当数据流个数为偶数个的时候,中位数为两个堆顶的平均数,为奇数个时,中位数为最大堆的堆顶。(也可以是最小堆的堆顶,取原创 2021-02-24 00:24:41 · 198 阅读 · 0 评论