算法工程师进阶之路
算法工程师进阶之路,想了解更多,欢迎访问:我的github 、 我的CSDN博客、 我的知识图谱 。
备注:您可以首先通过思维导图了解每部分大致内容,然后根据思维导图中的链接跳转到博客,查看具体笔记内容,最后通过博客尾部链接访问我的github。
菜鸟哆哆
USTC小硕,欢迎你的关注。
展开
-
网易笔试题——合唱团
一、题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?二、解题思路 方案一(回溯法):从n个学生中选取k名学生,可以理解为在n个数据中,进行深度为k的递归,保持两组数据,一组表示当前的数据,一组表示最优的数...原创 2018-05-31 23:51:37 · 772 阅读 · 0 评论 -
华为笔试题——不重复随机数
一、题目概述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 二、解题思路 方法一: 如果不需要知道...原创 2018-06-01 00:07:35 · 242 阅读 · 0 评论 -
华为笔试题——查找单词个数
一、题目描述 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。二、解题思路 对于输入的字符串,根据空格分开,统计出单词个数。 三、注意事项 1.为了方便,统一将输入的字符串转化为大写或者小写。 2.根据 split 函数,将字符串分割。...原创 2018-06-02 21:12:33 · 576 阅读 · 0 评论 -
腾讯笔试题——Alpha_transto_num
一、题目描述 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。...原创 2018-06-02 21:31:19 · 470 阅读 · 0 评论 -
阿里笔试题——统计字符串中最多数之和
一、题目描述 写段代码,定义一个字符串常量,字符串中只有大小写字母和整数,输出字符串中的出现最多的数字的和?例如 ” 9fil3dj11P0jAsf11j ” 中出现最多的是11两次,输出22二、解题思路 1.使用正则表达式来划分数字和字符; 2.使用map来存放最大值和最大数。三、注意事项 1.三种正则表达式的写法; ...原创 2018-06-03 12:24:41 · 429 阅读 · 0 评论 -
算法工程师学习资料和技巧汇总
一、学习资料 1) 便捷查资料的网站 1.1 科学网 2) 视频资料 2.1 龙芯计划 2.2 南大周志华视频 2.3 二、学习技巧...原创 2018-06-29 15:08:27 · 731 阅读 · 0 评论 -
最长公共子序列算法(LCS)
一、问题描述 LCS算法,找出两个字符串最大匹配子串。二、解题思路 设置两个矩阵,一个保存每次字符匹配的最大结果值,一个保存匹配符号。 在按行按列逐个字符匹配的过程中, 若匹配相同,则把上一次匹配的数量值加一(一般是矩阵左上角的数值),同时更新标记矩阵。 若不匹...原创 2018-07-19 11:51:26 · 3378 阅读 · 0 评论 -
顺时针打印矩阵
一、题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,1...原创 2018-07-19 20:51:31 · 154 阅读 · 0 评论 -
机器学习:基本概念
一、基本概念 列满秩:说明特性满秩,元组个数(n)大于特性个数。 病态矩阵:对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这种矩阵称为“病态矩阵”。有些时候不正确的计算方法也会使一个正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元(即对角线上的元素)上的元素很小,在计算时就会表现出病态的特征。 脊回归(又叫...原创 2018-07-23 10:36:47 · 185 阅读 · 0 评论 -
找出超过半数的那个数字
一、问题描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。二、解题思路 1) 思路一(最简洁): 根据鸽笼原理,最差情况下,也会出现三个“该数字”连续排...原创 2018-07-26 17:35:07 · 538 阅读 · 0 评论 -
Digital_trans
一、题目描述 1)中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。 2)中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。 3)阿拉伯数字中间有“0”时,中文大写要...原创 2018-07-29 10:55:06 · 347 阅读 · 0 评论 -
贪吃蛇
一、问题描述 初始状态:贪吃蛇的蛇头在坐标(0,0)处,蛇身长度为10,蛇尾在(-10,0)处,呈一字型,输入一行字符,L表示蛇向左行走一格,R表示蛇向右行走一格,U表示蛇向上行走一格,D表示蛇向下行走一格,判断输入的操作方式会不会导致蛇在自身上发生碰撞,会发生输出legal,不会发生输出illegal。二、解题思路 1) 获取身体坐标。 ...原创 2018-07-29 11:51:24 · 831 阅读 · 0 评论 -
送货最短路径
一、问题描述 如图,某物流派送员p,需要给a、b、c、d4个快递点派送包裹,请问派送员需要选择什么的路线,才能完成最短路程的派送。假设如图派送员的起点坐标(0,0),派送路线只能沿着图中的方格边行驶,每个小格都是正方形,且边长为1,如p到d的距离就是4。随机输入n个派送点坐标,求输出最短派送路线值(从起点开始完成n个点派送并回到起始点的距离)。1)输入: 1)输...原创 2018-08-02 16:32:57 · 5842 阅读 · 0 评论 -
构造回文
一、题目描述 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。二、解题思路 1. 利用最长公共字符串匹配的思路来解题。 2. 得到字符串及自身反转字符串。 3. 构造二维数组,进行匹配。 三、注意事项 数组从1开始循...原创 2018-08-17 00:28:55 · 648 阅读 · 0 评论 -
创造回文
一、题目描述 给定一个字符串,问是否能通过添加一个字母将其变为回文串。二、解题思路 方法一: 设置两个指针,头指针指向字符串首部,尾指针指向字符串尾部。若头尾指针相等,头指针加加,尾指针减减,向中间靠拢,若不相等,则进一步判断(头指针++,尾指针)和(头指针,尾指针--)中是否存在回文,运用递归完成。 方法二:既然可以通过添加构造回文,那么也可以...原创 2018-08-19 01:27:16 · 244 阅读 · 0 评论 -
统计字符串中首先出现三次的英文字符
一、问题描述 给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。二、解题思路 1)方法一(map方法):判断字符是否在map中,在的话加一并且判断是否等于三,等于直接输出,map中没有,则置一。 2)方法二(桶排序):设置26*2个桶,对应位加一。 方法一实现:map方法 ...原创 2018-08-22 17:19:42 · 1171 阅读 · 0 评论 -
字符串按照排列组合打印
一、问题描述 将输入字符串按照全排列的方式打印输出。二、解题思路 考虑使用回溯法。 确定参数值:字符数组和递归深度。 边界值判断:递归深度到达边界,并且记得return。 i之前的元素已经有序,通过for循环只对后续元素进行全排列。 三、注意事项 ...原创 2018-08-23 10:38:49 · 793 阅读 · 0 评论 -
数组中左小右大的数
一、问题描述 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。二、解题思路 构建一个数组min_right[],满足min_right[i]是当前位i至最后数组中最小的那个数。 定义一个当前最大值用于比较,定义list用来存数据。 ...原创 2018-08-23 16:07:47 · 813 阅读 · 0 评论 -
求数组中两两之差绝对值最小的值
一、问题描述 有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。(下述的所有解法中,依旧没有实现在O(n)时间内求解的,如果有好方法,求赐教!!!)二、解题思路 方法一:暴力做差,求最小值。时间复杂度O(n^2)。 方法二:排序做差,求相邻最小值。时间复杂度O(nlgn)。 方法三:设这...原创 2018-08-23 23:17:42 · 20929 阅读 · 1 评论 -
将string类型的IP地址转化成int
一、题目描述 将string类型的IP地址转化成int。 将int类型数转化成string类型的IP地址。二、解题思路 1)正则表达式对输入的string类型的IP地址进行判断。 2)将IP转化为int。 2.1)首先通过String.split("\\."),将字符串按照"."分开。 ...原创 2018-08-28 15:37:08 · 9493 阅读 · 1 评论 -
查找二叉树中x和y的最小公共父节点
一、问题描述 查找二叉树中x和y的最小公共父节点。 代码实现:见我的github:findxandy二、解题思路 1)写一个查找函数 findx:查找x是否在树2root中。 2)查找 root 的左孩子是否有该结点,递归。 3)查找 root 的右孩子是否有该结点,递归。 4)查找值x 和 y 是否...原创 2018-08-31 22:04:52 · 1118 阅读 · 0 评论 -
获取二进制(补码)中1位的数量
问题一:获取二进制中1位的数量 解题思路: 方法一:获取二进制正数中1位的数量:右移法 方法二:末尾1取反法,正数 方法三:查表法 方法四:(两两合并的思想)JDK自带...原创 2018-09-03 20:07:34 · 732 阅读 · 0 评论 -
数独实现
一、问题描述 给定一个数独矩阵,补充剩余空格,并返回完整的数据或者返回空(不能填充)。二、解题思路三、注意事项 1.四、代码实现 见我的github:Sudoku...原创 2018-09-03 20:18:55 · 800 阅读 · 0 评论 -
将一段压缩后的字符串解压缩,并且排序输出。
一、问题描述 将一段压缩后的字符串解压缩,并且排序输出。 解压:字符串后续跟着的数字表示该字符串需要重复几次。 排序:若相同的数字,如“c2a2”,按照ASCII编码排序,应输出“aacc”。二、解题思路 1)分割出数字或者字母的数组。 2)对数组排序,并且使用选择排序的方式对相同数量...原创 2018-09-05 20:50:44 · 2831 阅读 · 0 评论 -
完全多部图
一、问题描述 给定一张包含N个点、M条边的无向图,每条边连接两个不同的点,且任意两点间最多只有一条边。对于这样的简单无向图,如果能将所有点划分成若干个集合,使得任意两个同一集合内的点之间没有边相连,任意两个不同集合内的点之间有边相连,则称该图为完全多部图。现在你需要判断给定的图是否为完全多部图。 输入:第一行输入一个整数T表示数据组数,1≤T≤10。每组数据格式...原创 2018-09-10 12:49:26 · 1088 阅读 · 0 评论 -
Java实现队列
一、问题描述 Java实现队列:普通队列、循环队列(数组、链队)、优先队列 方法:增加(入队)、删除(出队)、查找、队列长度、 分析:Java jdk中实现形式二、解题思路 三、注意事项 1.。四、代码实现 见我的github:...原创 2018-09-21 21:14:39 · 254 阅读 · 0 评论 -
背包问题(动态规划)
一、问题描述 在限定背包重量的情况下,选择最优价值的物品放入背包,使总体价值最大。二、解题思路 1.确定状态转换方程。 2.找出所选物品。 三、注意事项 1.优化空间复杂度:采用一维数组代替二维数组。但是存在无法回找装入物品的弊端。四、代码实现 见我的github:backpack...原创 2018-09-22 21:24:07 · 307 阅读 · 0 评论 -
矩阵相乘
一、问题描述 假设存在一个m行n列的矩阵与一个n行k列的矩阵相乘,请写出算法关键步骤。二、解题思路 1.获取待相乘的矩阵的行和列,构造相乘后的矩阵 2.矩阵相乘三、注意事项 1.矩阵相乘是三层循环 2.二维数组然后获取行列四、代码实现 见我的github:...原创 2018-07-19 15:04:24 · 471 阅读 · 0 评论 -
镜像二叉树
一、问题描述 操作给定的二叉树,将其变换为源二叉树的镜像。 二、解题思路 1. 二叉树判空。 2. 交换左右孩子 3. 递归左右孩子。 三、注意事项 1. 二叉树需要判空。四、代码实现 见我的github:镜像二叉树...原创 2018-07-20 13:45:22 · 192 阅读 · 0 评论 -
子树判断
一、问题描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。二、解题思路 1) 如果当前结点相同,则通过compare函数进行对比子树是否一样。 2) compare函数对两个树进行相似判断。 首先得有一个位 然后对子树进行判断,如果两者都是空,那就直接返回假...原创 2018-07-20 13:45:11 · 602 阅读 · 1 评论 -
最大子段和
一、问题描述 已知数组A[1..n]中存放着一些实数,有正有负,请写程序找出其最大求和子区间,即:找出下标i和j,1≤i≤j≤n,使得的值达到最大。二、解题思路 1. 用一个temp_best进行数值累加 2. 当temp_best比best大的时候,更新数据。 3. 当temp_best小于零的时候,从头...原创 2018-07-20 14:02:54 · 182 阅读 · 0 评论 -
二叉树实现
本文内容:二叉树的数据结构、 二叉树的三种遍历赋值(先序、中序、后序)、 二叉树非递归先序遍历、 二叉树的层次遍历、 二叉树的按行打印。一、二叉树的数据结构 二叉树包括三个元素和一个构造函数。 ...原创 2018-07-25 17:12:04 · 1273 阅读 · 0 评论 -
二叉树中和为某一值的路径
一、题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)二、解题思路 1)首先是采用先序遍历二叉树的思想。 2)先对根节点进行非空判断(非空结点先加进来,如果不合适,后续删除)。 ...原创 2018-07-25 22:32:08 · 116 阅读 · 0 评论 -
简单排序(冒泡、插入、选择、堆排)
本部分内容包括:冒泡排序、插入排序、选择排序、堆排序。代码实现: 见我的github:简单排序(冒泡、插入、选择、堆排)一、冒泡排序 设计思路: 1.每次比较相邻的两个元素,排序从小到大。 2.每次从头比到尾,能确定一个...原创 2018-07-20 13:51:42 · 346 阅读 · 0 评论 -
链表相关(Java实现)
一、问题描述1. 单链表的构造1.1 头插法1.2 尾插法2. 单链表逆置(输入一个链表,从尾到头打印链表每个节点的值)2.1 数组存放,倒序输出2.2 利用栈倒叙输出,不改变链表本身(利用递归输出)...原创 2018-08-18 01:03:32 · 5519 阅读 · 0 评论 -
排序(归并、桶排、基数排序、计数排序)
本部分内容包括:归并、桶排、基数排序、计数排序代码实现: 见我的github:排序(归并、桶排、基数排序、计数排序)一、归并排序 设计思路1、数组分成两段,每段去排序2、排序时判断这两段是否越界,越界停止返回3、实行归并 注意事项:灌装数组的时候,需要注意temp数组的起始位置。二、桶排序 ...原创 2018-08-24 15:27:30 · 276 阅读 · 0 评论 -
二叉树中最大子路径和
一、题目描述 求二叉树中最大子路径和。二、解题思路 1. 判空根节点。 2. sum加和,并用list存结点。 3. 保存最优解 4. 递归。 5. sum减和,移除list结点三、注意事项 1. list = listtemp,赋值是错误的,容易导致list跟随listte...原创 2018-08-25 15:36:05 · 661 阅读 · 0 评论 -
返回数组中最小的k个数
一、题目描述 返回数组中最小的k个数。二、解题思路 方法一:堆; 方法二:快排 方法一,堆实现: 1) 整堆 2) 交换堆顶和数组末尾元素,循环整堆,注意边界值 3)数组倒叙 方法二,快排实...原创 2018-08-25 17:32:34 · 1370 阅读 · 0 评论 -
赫夫曼树及编码问题(Huffman)
一、题目描述 将数组转化为赫夫曼树。二、解题思路 赫夫曼树本质上是二叉树,赫夫曼树的每一个结点结构如下图: 构建Huffman数组并初始化 寻找最小值和次小值,并构建关系 构建关系 三、注意事项 1)为什么只循环array.length -...原创 2018-08-28 12:36:05 · 1110 阅读 · 0 评论 -
红黑树相关算法
一、题目描述 将数组转化为红黑树(add函数共包含四部分:add()、insertFixup()、rotateRight()、rotateLeft(),增加函数,颜色调整、左旋、右旋)。二、解题思路 步骤一:常规插入:树的二分查找,然后对插入点进行颜色调整。 步骤二:调整方式见下图。 步骤三:部分结点需要进行左旋和右旋。三...原创 2018-08-30 02:53:19 · 1132 阅读 · 0 评论