编程题
文章平均质量分 57
#Super Pig
这个作者很懒,什么都没留下…
展开
-
【编程练习】拼多多2021笔试真题集
题目来源:牛客,拼多多2021笔试真题集第一题:多多的数字组合打卡题,很明显的两个约束:每个位数各不相同 + 数字最小,在这两个条件的约束下,N最大为45,对应的数字为123456789。代码如下:def main(): N = int(input()) if N>45: print(-1) else: ind = 9 # 指示当前添加到那个数字了 ans = '' while N>ind: .原创 2022-04-20 21:03:37 · 1323 阅读 · 0 评论 -
【编程练习】回转寿司
题目来源:牛客,美团2021校招笔试编程题,第3题题目描述题解参考了别人的思路,这个问题可以分解为经典贪心+回转。当不考虑回转(环形)情形时,只需要用贪心求解最大连续子串值即可;当考虑回转(环形)情形时,可反向思考,就是,求解非环形连续子串的最小值,用总和减去该最小值就能得到最大值。贪心求解的思路:关键在于判断什么时候从新开始计数——当当前的子串总和小于0时,就得重新开始下一个子串,在此过程中,维护最大值;def main(): T = int(input()) for .原创 2022-04-19 10:04:36 · 800 阅读 · 0 评论 -
【编程练习】木桩
题目来源:牛客挑战赛第一题题目描述题解思路:只考虑一个小木桩(记作b),假设b前面有x个大木桩,后面有y个大木桩,那么,这个小木桩b能够带来的美观值为xy-x,即x(y-1)。又因为x+y=a,所以很容易得到当y为ceil((a+1)/2)时,x*(y-1)最大。一共有b个小木桩,所以最大的美观值就是bx(y-1),其中y=ceil((a+1)/2),x+y=a。代码如下:import mathdef main(): T = int(input()) for i in ra.原创 2022-04-17 16:25:22 · 217 阅读 · 0 评论 -
【编程练习】视力表
题目来源:牛客,阿里巴巴编程题(2星),第10题题目描述题解这道题的本质就是实现Cnm\text{C}_n^mCnm,ans = CN2a\text{C}_{N^2}^aCN2a+CN2−ab\text{C}_{N^2-a}^bCN2−ab+CN2−a−bc\text{C}_{N^2-a-b}^cCN2−a−bc。代码如下:import mathp = 998244353def power(x,y): #求x的y次方 global p res = 1 .原创 2022-04-12 10:35:49 · 789 阅读 · 0 评论 -
【编程练习】牛牛的方格图
题目来源:牛客小白月赛47,第E题【前4题都比较简单】题目描述题解思路:1)首先需要想清楚,如何框定某种颜色的覆盖范围?以下列方格图为例:1 3 3 43 2 1 46 3 3 4对于颜色3而言,一共有2种典型的覆盖方式:从(2,1)到(3,3) 和 从(2,1)到(3,1);这两种覆盖方式涵盖了颜色3所能覆盖的最大面积。从中可以发现,某个颜色所能覆盖的最大范围,其实由该颜色的min_x、min_y、max_x、max_y决定;2)如何标记覆盖范围?覆盖范围其实由以(min_x,mi.原创 2022-04-10 19:29:14 · 1483 阅读 · 0 评论 -
【编程练习】蚂蚁森林之王
题目来源:牛客,阿里巴巴编程题(2星),第8题题目描述题解倒序遍历。记录每个动物的粉丝数量,这里的粉丝数量存在累计,例如:3崇拜2,2崇拜1,那么1就有2个粉丝。从编号最大的动物开始,更新粉丝数量。而每个动物能得到的最高票数就等于粉丝数量加1。代码如下:⚠️注意,当动物i没有崇拜者时,需跳过该动物,不然就累加到最后一个动物的粉丝数量上了。def main(): n = int(input()) obj = [int(i) for i in input().split()].原创 2022-04-09 09:48:54 · 357 阅读 · 0 评论 -
【编程练习】小强的神器矩阵
题目来源:牛客,阿里巴巴编程题(2星),第7题题目描述题解法一:错误方法🙅♂️想用贪心去解,但解法是错的,代码如下:def main(): n = int(input()) a1 = [int(i) for i in input().split()] a2 = [int(i) for i in input().split()] a3 = [int(i) for i in input().split()] l1 = [a1[0],a2[0],a3[0].原创 2022-04-08 09:20:47 · 275 阅读 · 0 评论 -
【编程练习】国际交流会
题目来源:牛客,阿里巴巴编程题(2星),第6题题目描述题解思路比较简单,将n个member按从小到大的顺序排列,分成small和big两部分【若n为奇数,则small的长度比big多1】,再将big逆序,穿插合并small和big即可。代码:import mathdef main(): n = int(input()) member = [int(i) for i in input().split()] member.sort() small = membe.原创 2022-04-07 10:57:25 · 118 阅读 · 0 评论 -
【编程练习】小强修水渠
题目来源:牛客,阿里巴巴编程题(2星),第5题题目描述题解法一:中位数水渠的位置是序列中的中位数。证明如下:虽然不是很理解,但可以当个结论记住吧。代码:def main(): n = int(input()) ans = 0 xlist = [] for i in range(n): xi,yi = map(int,input().split()) xlist.append(xi) xlist.sort() .原创 2022-04-06 14:27:55 · 365 阅读 · 0 评论 -
【编程练习】比例问题
题目来源:牛客,阿里巴巴编程题(2星),第4题题目描述题解思想:先化简a/b至俩质数之比。那么,x/y = a/b*m。又因为x和y需要小于A和B,且x和y的乘积最大。这意味着m需要满足:x和y是小于A和B的最大值。这里,m存在两种可能性:1)x是小于A的最大值:m1=int(A/a),x1=m1a,y1=m1b;2)y是小于B的最大值:m2=int(B/b),x2=m2a,y2=m2b;现在就需要判断,应该选取m1还是m2:当y1大于等于B时,m1被排除;当x2大于等于A时,m2被排除.原创 2022-04-05 20:06:16 · 351 阅读 · 0 评论 -
【编程练习】小强去春游
题目来源:牛客,阿里巴巴编程题(2星),第3题题目描述从样例就可以看出,在选择由谁往回划的时候有两种选择方法。对样例1([2,10,12,11])来说,每次都由最轻的人往回划,这种方法是最省时的;对样例2([2,3,7,8])来说,如果每次都由最轻的人往回划,这种方法的耗时为22,而样例2给的答案是19。这时需要转换思路,先搞清楚19是怎么来的:令time=0;第一次“往”:2和3一起,time+=3;第一次“返”:2独自回来,time+=2;第二次“往”:7和8一起,time+=.原创 2022-04-03 17:33:54 · 921 阅读 · 0 评论 -
【编程练习】选择物品
题目来源:牛客,阿里巴巴编程题(2星),第2题题目描述题解法一:很绕的想法自认为本质是实现n进制的加法,但觉得很难实现,便借助了进制转换。思想:以n=8,m=5为例。最小的输出(minn)肯定是“1 2 3 4 5”,最大的输出(maxn)是“4 5 6 7 8”。为了计数方便,借助了映射转换:minn其实可以映射为“0 0 0 0 0”,而maxn可以映射为“3 3 3 3 3”,映射到4进制空间。所以,输出其实可以看做5位(m位)4进制(n-m+1进制)数,即“a0 a1 a2 a3.原创 2022-04-01 22:45:01 · 295 阅读 · 0 评论 -
【编程练习】完美对
题目来源:牛客,阿里巴巴编程题(2星),第1题题目描述题解法一:暴力解法【必然超时😅】好歹也是一个字一个字敲出来的,记录一下def isPerfect(a,b,k): base = a[0]+b[0] for i in range(1,k): if base==a[i]+b[i]: continue else: return 0 return 1def main(): ans .原创 2022-04-01 16:24:18 · 727 阅读 · 0 评论 -
【编程练习】第K小子串
题目来源:牛客,腾讯2021校园招聘技术类编程题汇总 第2题题目描述:题解:法一:个人解法✨利用python中的set+list.sort(),感jio有点无耻。💡唯一一点想法是:第k小的子串的长度必然小于等于k,因此,只需要将字符串s中长度小于等于k的所有子串拿出来并排序即可。⚠️注意,由于子串可能会重复,因此借助了set去重。🔥再注意,之前的一个错误想法是:当subs中存储的子串数量大于k时就可以停止收集子串,但这种想法是错的,因为前k小的子串可能出现在很后面。def main().原创 2022-03-31 20:03:03 · 1285 阅读 · 0 评论 -
牛客竞赛Arch0n interesting game
题目链接:https://ac.nowcoder.com/acm/problem/15686一、题目:二、题意:给定n张牌,两两抽取,以小的那张的数值为有效分值,找出第k大的有效分值。三、思路:1、错误示范:我进行了模拟,把所有有效分值记了下来,然后排序,结果。。。自然超时。2、改进版:总结了一下,发现这些分值是有规律的,如果将n个数按从小到大排列按顺序进行比较,那么前n-1个有效值就是第1个数,接下来的n-2个有效值为第2个数,再接着的n-3个有效值为第3个数……我的笨办法是把这些数原创 2020-06-05 19:54:24 · 142 阅读 · 0 评论 -
牛客竞赛Anagram
题目链接:https://ac.nowcoder.com/acm/problem/15927一、题目:二、题意:给定两个长度一样的字符串(均为大写字母),计算将A变为和B一样的构成最少需要多少步。三、思路:将A和B分别按字母顺序排序,由于可能存在轮回向前找的情况,为了避免绕大圈,所以直接将A的当前字母和B的尾巴上未匹配的字母进行操作。四、代码:#include <stdio.h>#include <stdlib.h>#include <string.h&原创 2020-06-05 16:08:23 · 245 阅读 · 0 评论 -
PAT甲级真题 1012 The Best Rank
一、题目二、思路题目给定N个学生的C、M、E三科成绩,要求输出给定的M个学生的最好的排名及该科目,若最好排名相同,按A>C>M>E的顺序输出科目。1、存储:按结构体存储每个学生的信息,为了方便处理相同排名,规定结构体内数组sc和rk按A、C、M、E存储成绩和排名。2、计算科目排名:遍历,从高分开始排,查看有没有100分的,有则排第1,没有就查看有没有99分的,有就...原创 2020-04-07 15:03:53 · 310 阅读 · 0 评论 -
PAT甲级真题 1001 A+B Format
一、题目二、思路题目要求计算a+b(=c),并将结果c按照千位一分的格式输出。注意到a和b最多有7位,也就是c最多也是7位,那最多会加2个逗号。因此,将结果分三类:不加逗号、加一个逗号、加两个逗号。三、代码#include <stdio.h>#include <stdlib.h>int main(){ int a, b, c, f, l, m; //f...原创 2020-03-31 10:51:04 · 140 阅读 · 0 评论 -
PAT甲级真题 1017 Queueing at Bank
一、题目二、还是要搞清楚思路,运用技巧注意细节!!!三、代码v1.0:#include <stdio.h>#include <stdlib.h>#define START 28800#define STOP 61200typedef struct { int at; int pt; int st; int et;}customer;cust...原创 2020-04-15 21:28:44 · 159 阅读 · 0 评论 -
PAT甲级真题 1016 Phone Bills
一、题目二、思路1、先将所给数据按姓名、时间进行排序,即这样⬇排好序后,上下相邻的on和off即为配对记录;????C语言中调用qsort对结构体进行排序:1、记住包含头文件<stdlib.h>2、示例:qsort(data, n, sizeof(record), cmp);,第一个参数为要排序的数组名;第二个参数为数组中元素个数;第三个参数为数组的数据类型大小,即每个元...原创 2020-04-14 14:03:59 · 230 阅读 · 0 评论 -
PAT甲级真题 1015 Reversible Primes
一、题目二、思路1、题意:给定一个十进制数N,若N为素数,且判断如下数是不是素数:将N转换为D进制数,再反序,再转换为十进制数,若这个数为素数,则N为Reversible Prime。2、注意:1)先判断N是不是素数;2)1不是素数,这是第三个测试点考察细节;3)素数判断的细节;4)用数组存储进制转换后的数,int装不下;三、代码#include <stdio.h>...原创 2020-04-13 12:53:42 · 151 阅读 · 0 评论 -
PAT甲级真题 1013 Battle Over Cities
一、题目二、思路题目给定一个无向图及K个被占领的点,要求出第k个点被占领后,为使图连通所需增加的边的数目。考察点:图的构造及遍历。为使图连通所增加的最小数目的边数,即,连通分量数-1。连通分量的数目可以通过遍历求得。而去掉某个点,实际上可以通过把它看作一个独立的连通分量,标记这个点已访问过,这样遍历的时候就不会考虑它。摘自柳神的分析:三、代码这里采用邻接矩阵存储图、深度优先遍历。...原创 2020-04-09 09:53:47 · 131 阅读 · 0 评论 -
PAT甲级真题 1014 Wait In Line
一、题目二、思路题意:模拟排队,但和实际排队的区别在于:一旦入队,不得换队;17:00之前未开始办理的消费者,给予Sorry;17:00之后,已开始办理的消费者,继续办理直到办理结束;思路:模拟排队,记录消费者办理结束所需的总时间(以分钟为单位,最后转换为时刻,由等待时间、办理时间组成),若等待时间wt>540,则给予Sorry;否则,根据总时间sum算出相应时刻;注意:当两...原创 2020-04-09 18:33:26 · 413 阅读 · 0 评论 -
PAT甲级真题 1003 Emergency
一、题目二、思路在Dijkstra算法的基础上,统计最短路径条数和最大顶点权值(消防队数目)。需判断什么时候出现相同最短路径(D[j] == D[k] + dist[k][j]),出现后,tot数组该如何变化(tot[j]+=tot[k];)。最大消防队比较容易。三、代码int N,D[500],s[500],tot[500],team[500],num[500];//N-城市数,D...原创 2020-04-01 16:03:19 · 216 阅读 · 0 评论 -
PAT甲级 1022 Digital Library (暨 set、map总结)
一、map总结1、头文件:#include <map>2、定义一个map类型的变量:map<int,string>mp;其中,mp的key为int类型,val为string类型;map不限制其键值的数据类型,可以设为其他任何类型;3、插入元素://定义一个map:map<int,string> mpi;mpi.insert(pair<int,string>(0,"zero");//法一:insert插入pairmpi.insert(map<原创 2020-07-01 17:03:05 · 148 阅读 · 0 评论 -
PAT甲级真题 1004 Counting Leaves
一、题目二、思路题目给定一棵树,并要求输出树中每层叶子结点的个数。用邻接链表存储树,在遍历数组的同时,标记结点所属层数及它是否是叶子。三、代码#include <stdio.h>#include <stdlib.h>int main() { int N, M, i, j, m, n, l, cnt[100] = { 0 }, max;//cnt存储每层有...原创 2020-04-01 16:29:33 · 196 阅读 · 0 评论 -
PAT甲级真题 1002 A+B for Polynomials
一、题目二、思路多项式加法,数据结构学习链表时的典型应用。emm不过忘得差不多了,自己用数组写了一遍。几个关键点:多项式A和B的项数不同时的处理、多项式相加后的和的项数。三、代码#include <stdio.h>int main() { //ak、bk、ck存储项数,ae、be、ce存储指数 int ak, bk, tmp, ae[10] = { 0 }, be[...原创 2020-03-31 20:02:59 · 313 阅读 · 0 评论 -
剑指offer 50~68-II题 python题解记录
题50:第一个只出现一次的字符法一:我以为我想的是个牛气方法,结果????了虽然代码行数很少,但每次count都会遍历一遍sclass Solution: def firstUniqChar(self, s: str) -> str: for i in s: if s.count(i)==1: return i return " "法二:正解是用字典记录下每个字符出现的次数,再返回第一个只出现一次原创 2021-05-23 16:31:31 · 120 阅读 · 0 评论 -
剑指offer 46-49题 python题解记录
题46:把数字翻译成字符串啊啊啊终于会用dp了,向前迈了一步,奶思!!和青蛙跳是一个思路,转移方程:dp[i] = dp[i-1] #当前数字单独翻译为一个字母(0<=val<=9)dp[i]+=dp[i-2] if s[i-1]+s[i] 可以翻译成一种字母 (10<=加起来val<=26)我将dp[0]、dp[1]都初始化了,王先生的题解没有class Solution: def translateNum(self, num: int) -> int:原创 2021-05-22 21:11:21 · 127 阅读 · 0 评论 -
剑指offer 43-45题 python题解记录
题43:1~n整数中1出现的次数这道题从思路上都没转换过来,最初试图分段统计,但正确思路是计算每个数位上可能出现的1的次数详细分析见????王先生的题解法一:我的版本相对复杂一点,没有正解简洁class Solution: def countDigitOne(self, n: int) -> int: ans,s=0,str(n) for i in range(len(s)): high,low=s[:i],s[i+1:]原创 2021-05-17 21:26:24 · 101 阅读 · 0 评论 -
剑指offer 题39-42 python题解记录
题39:数组中出现次数超过一半的数字法一:字典/哈希表统计用字典记录下num出现的次数,若超过1/2,则return时间复杂度O(N)、空间复杂度O(N)class Solution: def majorityElement(self, nums: List[int]) -> int: d={} l=len(nums) for num in nums: if num in d.keys():原创 2021-05-16 20:51:29 · 134 阅读 · 0 评论 -
剑指offer 34-37题 python题解记录
题34:二叉树中和为某一值的路径深度优先能想到,但还是有几个点是自己没想清楚的:关于target匹配,我想的是从0开始,加上当前节点的值,去判断是否和target相等,但大佬的做法是从target开始,减去当前节点的值,判断是否为0;这一做法的好处是,避免了回朔过程中的当前值难以记录的问题,妙啊关于将list的append问题,由于path指向列表,因此直接用res.append(path)是将path指向的空间加到了res里,后续path改变时,res也会变(深浅拷贝问题),解决方法是,采用res原创 2021-05-11 16:20:17 · 120 阅读 · 1 评论 -
剑指offer 题20-33 Python题解记录
题20:表示数值的字符串我的做法更复杂一点,因为之前没有考虑到科学计数法前半部分也可以是浮点数。主要是分情况讨论,分别处理:1)含有e时;2)不含e但含有.时3)既不含e也不含.时;这三种情况。同时,将有符号数和无符号数的判断集成为了函数;class Solution: def isNumber(self, s: str) -> bool: s = s.strip() #去掉字符串的首尾空格 if s != '' and (s[0] == '+' or s[原创 2021-04-27 13:54:17 · 190 阅读 · 0 评论 -
剑指offer 题9,12-18 python题解记录
题9:用两个栈实现队列队列是先进先出,栈是先进后出,两个栈实现队列的基本思想就是:数据从stack1进入,再将stack1中的数据倒到stack2中,那么从stack2中出来的数据顺序就和进入stack1中的数据顺序一样了,也就实现了队列。处理细节就是,有数据进入时,只管往stack1中添加,当需要取出数据时,只管从stack2中取,如果stack2为空,那么就把stack1中的元素倒到stack2中(妙喵喵~王先生题解????hereclass CQueue: def __init__(se原创 2021-04-16 13:19:24 · 150 阅读 · 0 评论 -
剑指offer 题10-11 python题解记录
题10-1:斐波那契数列法一:递归(C语言讲递归的经典例题),但超时了。。class Solution: def fib(self, n: int) -> int: # 递归超时 if n<=1: return n else: return int((self.fib(n-1)+self.fib(n-2))%(1e9+7))法二:循环class Solution: def f原创 2021-04-15 11:27:47 · 112 阅读 · 0 评论 -
剑指offer 题3-7 python题解记录
注:题目编号与LeetCode一致基本上,法一都是我想到的,法二都是@王先生想到的,我太蠢了ಠ_ಠ……题3:数组中重复的数字法一:遍历nums,如果i不在uni中,则将i放入uni中,若存在,则return;评价:该方法的缺点是,除了遍历nums,还需要遍历uni,复杂度为O(n^2)class Solution: def findRepeatNumber(self, nums: List[int]) -> int: uni = [] for i .原创 2021-04-14 18:12:02 · 175 阅读 · 3 评论
分享