编程
爱学习的程序员
我很菜的
展开
-
2020实习笔试题——最有价值数的个数
问题描述对一个数组,求每个数左边比他大的数的最小值,右边比他小的数的最大值,若这两个数成倍数关系,则它为最有价值的数问题分析没什么好说的,两次循环记录每个数左边比他大的数的最小值,以及右边比他小的数的最大值。最后,判断是否有最有价值数。代码示例import bisectnum = list(map(int, input().split()))n = len(num)left_max = [float('-inf')] * nright_min = [float('inf')] * n原创 2021-03-16 11:29:24 · 228 阅读 · 0 评论 -
2020年实习笔试题——最大的最短路径和
问题描述现有n个人,m座城市,它们的目的地都是x。此外,两座城市的距离不对称。求最短路径的最大值。问题分析两遍Dijstra算法。代码示例def dijstra(n, x, dist, matrix): for j in range(1, n + 1): dist[j] = matrix[x][j] visited = [False] * (n + 1) visited[x] = True while True: t = -原创 2021-03-16 11:27:28 · 299 阅读 · 1 评论 -
阿里2020.3.30笔试题——养鸡场
问题描述给定鸡场数量nnn,养鸡天数mmm,每次增加数量kkk每一天开始时,每个养鸡场都增加k只鸡;每一天结束时,将数量最多的鸡场数量减半(向下取整)问题分析因为每次选择数量最多的鸡场,所以使用大顶堆即可。代码示例import heapq as hpdef solve(): N, M, K = map(int, input().split()) chicken_list = list(map(int, input().split())) chicken_list =原创 2021-03-15 16:51:24 · 337 阅读 · 1 评论 -
阿里2020.4.3实习笔试题——格子体力
问题描述一个n*m的矩阵格子,每个格子的值是体力,每经过一个格子需花费相应的体力,求从上方越过矩阵到达下方的最小体力花费。问题分析堆优化的动态规划。代码示例class Node: def __init__(self, x, y, dist): super().__init__() self.x = x self.y = y self.dist = distclass MinHeap: def __init__(se原创 2021-03-15 16:28:26 · 423 阅读 · 0 评论 -
阿里2020.3.23笔试题——走迷宫
问题描述小强在玩一个走迷宫的游戏,他操控的人物现在位于迷宫的起点,他的目标是尽快的达到终点。每一次他可以选择花费一个时间单位向上或者向下或者向左或者向右走一格,或是使用自己的对称飞行器花费一个时间单位瞬移到关于当前自己点中心对称的格子,且每一次移动的目的地不能存在障碍物。具体来数说,设当前迷宫有nnn行mmm列,如果当前小强操控的人物位于点A(x,y)A(x, y)A(x,y),那么关于点AAA中心对称的格子B(x′,y′)B(x', y')B(x′,y′)满足x+x′=n+1x + x' = n + 1原创 2021-03-15 16:23:02 · 915 阅读 · 2 评论 -
阿里2020.3.23实习笔试——队伍选择
问题描述现有nnn个人,从中选择任意数量的人组成一支队伍,再从这些人中选出1名队长,求不同方案数对∣109+7∣|10^9 + 7|∣109+7∣ 的结果。如果两个方案选取的人的集合不同或选出的队长不同,则认为这两个方案是不同的。求输入任意人数nnn得到的队伍数。问题分析典型的排列组合问题。因为从nnn个人中选择任意数量的人组成队伍,则依次有Cn1,Cn1,…,CnnC_n^1, C_n^1, \dots, C_n^nCn1,Cn1,…,Cnn中选择方式。然后,在这些队伍中选择一个人作为队长,即原创 2021-03-15 16:17:23 · 203 阅读 · 0 评论 -
阿里2020.4.1实习笔试题——翻转01字符串
问题描述给一串二进制字符串如00011001,希望把他改为全为0,如果更改某个字符,那么他两边的字符也要更改,例如把第二位的0换成1,那么就变成了11111001. 求最少翻转次数。如果无法全0,输出NO。问题解析因为每翻转当前字符,其相邻字符也会翻转,所以每当遇见为1的字符时,将它下一个的字符进行翻转。因为这样做可以保证之前的字符全部为0,即本次翻转不会影响之前的结果。如此循环迭代之后,判断最后一个是否为0即可。代码解析def flip(s, i): def __flip(s, i):原创 2021-03-15 16:07:12 · 2490 阅读 · 0 评论 -
阿里2020.4.1实习笔试题——攻击怪兽
问题描述有NNN个怪兽,MMM个弓箭,每个怪兽有生命值,每个弓箭有杀伤力和价值,每个怪兽只能用一支弓箭攻击,弓箭杀伤>=怪兽生命时可消灭怪兽,求使用弓箭的最小价值。如无法消灭,返回-1。问题解析因为目标是消灭怪兽,而且每个怪兽只能被一只弓箭攻击,所以我们应该在优先考虑消灭的基础上,选择最小价值的弓箭。根据这个推理,我们可以将怪兽的生命值非升序排序,并同时将弓箭按照攻击力进行非升序排序。最后,循环遍历能消灭当前怪兽的弓箭,并使用优先队列进行维护,选择价值最小的那一只即可解决该问题。代码解析N,原创 2021-03-15 15:57:27 · 273 阅读 · 0 评论 -
阿里2020.4.8笔试——木头人攻击
问题描述某人有nnn次机会攻击mmm个怪兽。攻击时,可以一次攻击bbb只怪兽。每个怪兽有aaa滴血,每次攻击能让bbb只怪兽都减一。问题解析很简单。当b>mb > mb>m时,只需判断nnn与aaa的大小关系。nnn大则必定能将mmm只怪兽消灭,反之则一只也无法消灭。当b≤mb \le mb≤m时,因为每次只能选择攻击其中的一部分怪兽,所以需要计算理论上的最大攻击数attacknum=n∗b/aattack_num = n * b / aattacknum=n∗b/a,如果atta原创 2021-03-15 15:46:26 · 189 阅读 · 0 评论 -
阿里2020.4.13实习笔试题——蚂蚁森林之王
问题描述森林里有nnn只动物,编号从1到nnn,编号越小的动物能力越大。他们想投票选出森林之王,每只小动物可以投票选自己,或者与自己的偶像投票相同;如果没有偶像,就只能投自己。 已知小动物是否有偶像以及具体是谁,求每个人能够得到的最高票数是多少?问题分析崇拜的关系是传递的,如果崇拜关系当做树的一条边,题目所求即以iii为根的某棵树的节点数。此外,因为动物顺序是按照能力从大到小排序,所以后向遍历有ans[A[i]]+=ans[i]ans[A[i]] += ans[i]ans[A[i]]+=ans[i]原创 2021-03-15 14:43:14 · 871 阅读 · 0 评论 -
阿里2020.4.10笔试题——取水最小距离和
问题描述二维格点上有nnn座房子,小强打算修一条平行yyy轴的水渠,水渠无限长,现在求小强修水渠的位置,能使得这nnn座房子到水渠的处置距离和最小,输出最小距离和。问题分析因为水渠是平行于yyy轴,且长度无限,所以本题的距离和只需考虑横坐标。因此,只需计算所有房子的中间位置(横坐标),再一一计算房子到水渠的距离,即可求解。代码示例n = int(input())row_list = []for _ in range(n): row, _ = map(int, input().spli原创 2021-03-15 10:20:05 · 391 阅读 · 0 评论 -
阿里2020.4.10笔试题——方格染色
问题描述给定一个m×nm \times nm×n的方格,有ccc种颜色的染料,每一种染料有c[i]c[i]c[i]升,每涂一个格子需要1L,对于某个格子上下左右4邻域的格子不能染成和本身格子一样的颜色,求是否能够找到染色方案?(保证升数总和和格子总数一致。)问题分析由抽屉原理可知,把多于nnn个的物体放到nnn个抽屉里,则至少有一个抽屉里的东西不少于两件。此外,因为相邻格子的横纵坐标和奇偶性不同,所以可以将奇数视作一种组合,偶数视作一种组合。因此,当有一种染料的升数多于某一种集合大小,则必定存在相邻各原创 2021-03-15 10:09:50 · 762 阅读 · 0 评论 -
NPM安装任何包都报错的解决方法
博主最近搬砖辛苦,前面刚搬完数据库的砖,现在就要和前端对接测试了。然而,把前端文件下载完毕,安装依赖时却报一大堆错误。天坑!因此,博主记录踩坑过程,希望能帮助大家。npm ERR! Windows_NT 6.1.7601npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "express"npm ERR原创 2020-05-28 15:29:28 · 2592 阅读 · 0 评论 -
服务器ftp搭建记录
最近,博主应组内学习(搬砖)需要,为组内服务器搭建了 ftp 服务,踩坑较多。因此,博主撰写此博客,希望对大家有所帮助。简介FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。FTP支持以下三种认证模式:匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。原创 2020-05-19 21:04:41 · 332 阅读 · 0 评论 -
Docker 学习笔记
简介Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。优点Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使...原创 2020-04-10 16:47:54 · 991 阅读 · 0 评论 -
Docker ToolBox 镜像加速
博主在最近学习 docker 的过程中,遇到了一大通病 —— 速度太慢!想必大家也深受其扰。然而,由于环境问题 win10 home + docker toolbox, 博主翻来找去,也没怎么找到适合的方法(网上大多是 docker 的方法)。幸亏博主最终找到了一篇博客 Docker Toolbox 镜像加速 ,终于填坑完毕。在讲述步骤之前,大家可以预先查找合适的镜像地址。docker官方中...原创 2020-02-17 21:28:59 · 322 阅读 · 0 评论 -
Ctags 学习笔记
本人在最近的学习过程中接触到了 ctags 工具。使用 Vim 的同学对此一定不陌生,它可以帮助 Vim,Emacs 等编辑器使用代码跳转,堪称程序员的神器。因此,本人特此撰写笔记分享给大家。本篇博客参考了ctags使用详解程序员的七种武器之CtagsExuberant Ctags中文手册简介Ctags 是一种编程工具,可生成在各种编程语言的源文件和头文件中找到的名称的索引文件 ...原创 2020-02-16 22:14:07 · 457 阅读 · 0 评论 -
ROUGE 和 pyrouge 安装配置
从事摘要生成的同学们对 ROUGE 一定不陌生。它是由微软亚研的大佬 Chin-Yew Lin 提出并提供了官方的工具包。然而由于 ROUGE 官方包基于 Perl 语言开发,且太过陈旧,而作者对其也一直不闻不问,导致大家在安装配置时踩了无数的坑(作者当时安装时都快哭了)。因此,为了帮助大家不再踩坑,本人特地总结各优秀博客,希望有所帮助!从头再来:在虚拟机上搭建ROUGE和PyROUGEROU...原创 2020-02-14 20:06:47 · 275 阅读 · 0 评论 -
《算法导论》——十分钟了解堆排序!
《算法导论》——堆排序基本概念堆排序,顾名思义,也是排序算法的一种。与归并排序算法一样,堆排序的时间复杂度是O(nlgn)O(nlgn)O(n\lg n),整体优于插入排序。然而与归并排序不同的是,堆排序和插入排序一样,具有空间原址性:任何时候都只需要常数个额外的元素空间存储临时数据。因此,堆排序是集成了插入排序和归并排序的优点于一身的一种排序算法。堆是一种常用的数据结构,不仅用...原创 2018-07-09 17:29:46 · 645 阅读 · 0 评论 -
《算法导论》——简洁明了的插入排序算法
《算法导论》——插入排序基本概念所谓插入排序,即将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,适用于少量数据的稳定排序,时间复杂度为O(n2)O(n2)O(n^2)。既然插入排序是用于数据的排序,不如就顺便阐述一下排序的概念:输入:n个数的一个序列(a1,a2,…,an)(a1,a2,…,an)(a_1, a_2,\ldots, a_n).输出:...原创 2018-06-28 21:54:08 · 317 阅读 · 0 评论 -
《算法导论》——十分钟了解归并排序!
《算法导论》——归并排序基本概念与插入排序相同,归并排序也是一种常见的排序算法。归并排序是建立在归并操作上的一种高效且稳定的排序算法。该算法是采用分治法将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。算法思想归并算法的核心思想即分治法。所谓分治法,就是将问题分而治之。它将原问题分解为几个规模较...原创 2018-06-28 22:43:15 · 318 阅读 · 0 评论 -
《算法导论》——十分钟带你了解最大子数组问题
《算法导论》——最大子数组问题问题概述假如你有一天突发奇想,准备投资股票大捞一笔,从而别墅靠海,走向人生巅峰。经过深思熟虑,你最终选定一家公司的股票。你被准许可以在某个时刻买进一股该公司的股票,并在之后某个日期将其卖出,买进卖出都是当天交易结束后进行。为了补偿这一限制,你可以了解股票将来的价格(是不是感到很兴奋啊!)。股票未来一段时间内的价格如图所示。你可能直观地认为,直接在最...原创 2018-07-11 23:23:53 · 314 阅读 · 0 评论 -
《算法导论》——矩阵乘法Strassen算法
《算法导论》——Strassen算法矩阵乘法接触过线性代数的读者,对于矩阵乘法想必一定不陌生。若A=(aij)A=(aij)A=(a_{ij})和B=(bij)B=(bij)B=(b_{ij})是n∗nn∗nn*n的方阵,则对i,j,…,ni,j,…,ni, j, \ldots, n,定义乘积C=A⋅BC=A⋅BC=A \cdot B中的元素cijcijc_{ij}为:cij=...原创 2018-07-13 22:18:41 · 2754 阅读 · 3 评论 -
《算法导论》——十分钟了解快速排序!
《算法导论》——快速排序基本概念快速排序最早由C. A. R. Hoare在1962年提出,一经面世,就备受瞩目。不过,快速排序并不快!对于包含n个数的输入数组来说,快速排序是一种最坏情况下时间复杂度为Θ(n2)Θ(n2)\Theta(n^2)的排序算法。然而,快速排序真的很快!因为,它的平均性能非常好,期望时间复杂度为Θ(nlgn)Θ(nlgn)\Theta(n\lg n),而且Θ...原创 2018-07-15 22:56:56 · 551 阅读 · 0 评论 -
《算法导论》——如何在线性时间内完成排序?
《算法导论》——线性时间排序众所周知,任何比较排序在最坏情况下都要经过Ω(nlgn)Ω(nlgn)\Omega(n \lg n)次比较。所谓比较排序,是指在排序的最终结果中,各元素的次序依赖于它们之间的的比较。之前介绍的,快速排序,堆排序,归并排序等经典排序算法都是其中的代表。那么问题来了,难道真的无法在Ω(nlgn)Ω(nlgn)\Omega(n \lg n)时间内对一个无序数组完成排序...原创 2018-07-19 16:52:13 · 1570 阅读 · 0 评论 -
《算法导论笔记》——十分钟带你了解二叉搜索树(BST)!
搜索树数据结构支持许多动态集合操作,包括SEARCH(查找指定结点)、MINIMUM(最小关键字结点)、MAXMUM(最大关键字结点)、PREDECESSOR(结点的先驱)、SUCCESSOR(结点的后继)、INSERT(结点的插入)和DELETE(结点的删除)等。因此,我们使用一棵搜索树既可以作为一个字典又可以作为一个优先队列。 二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。对于...原创 2018-07-27 20:18:46 · 32649 阅读 · 10 评论 -
轻量级Web框架——Flask的新人教程笔记
Flask笔记注:本篇博客只是作为博主的笔记,想要深入学习的同学还是要观看官方教程。前沿“微”:核心简单,易于扩展 --> 不包含许多已有库胜任的功能,但支持扩展。 个人理解:相当于提供一系列接口,开发人员可以根据自身需求进行定制;快速入门一个最小的应用from flask import Flaskapp = Flask(__name__)@app.route('/')d...原创 2019-03-22 16:37:49 · 263 阅读 · 0 评论 -
curl命令学习笔记
博主最近在学习 ES(elastic search) 的过程中,接触到了 curl 命令,并被其简洁而又实用的优点所吸引。因此,博主撰写此博文作为 curl 命令的学习笔记,并希望能对读者有所帮助。本篇博客主要学自阮一峰老师的博客curl网站开发指南。简介curl 是一个利用URL语法在命令行下工作的文件传输工具。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具...原创 2019-06-16 23:58:12 · 1430 阅读 · 0 评论 -
Latex常用的数学符号表示
使用 Latex 排版的同学们想必和博主一样,在撰写论文的过程中,大多无法避免数学符号的使用。因此,博主撰写本篇博客,作为学习笔记,并希望对大家有所帮助。注:本篇博客主要参考常用数学符号的 LaTeX 表示方法。指数与下标在 Latex 中,指数命令 ^ 与下标命令 _,可以嵌套使用语法效果a_{1}a1a_{1}a1a^{1}a1a^{1}a1a^{3...原创 2019-06-18 12:47:49 · 10166 阅读 · 5 评论 -
Leetcode之二叉树翻转
博主在面试字节跳动实习生岗位时,遇见了二叉树翻转的问题。而刷过 leetcode 的同学们对此也不会陌生,因为它就是 Leetcode 上的原题——invert-binary-tree。因此,博主在此给出解题思路和解题方案,希望能对大家有所帮助。简介题目要求十分简单——给定一棵二叉树,将其左右子树进行翻转,如下图所示。从上图中,我们不难看出原二叉树结点的父子关系不变,兄弟关系发生了交换...原创 2019-07-16 15:08:01 · 842 阅读 · 0 评论 -
LeetCode之链表相加
博主在面试字节跳动实习生岗位时,遇见了链表求和的问题。而刷过 leetcode 的同学们对此也不会陌生,因为它就是 Leetcode 上的原题——Add Two Numbers II。因此,博主在此给出解题思路和解题方案,希望能对大家有所帮助。简介给定两个非空链表来代表两个非负整数。其中,数字最高位位于链表开始位置。它们的每个节点只存储单个数字。我们需要将这两数相加会返回一个新的链表。例如,...原创 2019-07-16 15:09:43 · 3021 阅读 · 0 评论 -
LeetCode之接雨水
博主在面试字节跳动实习生岗位时,遇见了接雨水的问题。而刷过 leetcode 的同学们对此也不会陌生,因为它就是 Leetcode 上的原题——Trapping Rain Water。因此,博主在此给出解题思路和解题方案,希望能对大家有所帮助。简介给定 nnn 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。例如,给定数组为 [0,1,0,2,1,0,...原创 2019-07-16 15:11:32 · 569 阅读 · 2 评论 -
多边形周长等分
博主在面试字节跳动实习生岗位时,遇见了 nnn 多边形周长 kkk 等分的问题。其原题是所有边都为水平边或者垂直边。而这里博主给出更通用的版本——希望能对大家有所帮助。简介给定 nnn个点的坐标 f1(x1,y1),f2(x2,y2),…,fn(xn,yn)f_1(x_1, y_1), f_2(x_2, y_2), \dots, f_n(x_n, y_n)f1(x1,y1),f2(x...原创 2019-07-16 15:12:20 · 1253 阅读 · 1 评论 -
十分钟了解绘图神器——Graphviz学习笔记
DOT语言学习笔记设置点和线的形状与颜色digraph是有向图,graph是无向图。要注意,->和–都表示图中的一条边,但是前者用于有向图中,而后者用于无向图中,不能混用。代码示例diaGraph G{ main -> parse -> execute main -> init main -> cleanup exec原创 2018-11-30 20:25:00 · 3397 阅读 · 0 评论