
数据结构与算法
文章平均质量分 78
月光轩辕-
Keep moving
展开
-
[面试题]堆来模拟栈
#pre面试的时候遇到的,面试官要求手写代码。问题本身不难,但是需要注意自己的想法是否最优#问题分析堆是后进先出,栈是先进先出,所以自然而然有了想法1,用栈去存储数据,如果需要返回数据,那么新建一个栈,把原来栈所有的东西弹出来,退出最底部的元素,返回给外部,然后将栈还原。//使用语言javaimport java.util.*;//这里假定访问方式是单线程,如果多线程访问 需要对s...原创 2018-11-02 13:49:21 · 633 阅读 · 0 评论 -
leetCode11.盛最多水的容器
pre刷题的时候遇到的,没有想到最优解,而在网上搜索的时候基本上只有代码而没有证明,所以我这里不上相关的逻辑证明题目(详细题目请直接点击文末的链接)1 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可...原创 2018-08-22 17:36:43 · 425 阅读 · 0 评论 -
寻找最小的第k个数,寻找两个数组元素和构成的新数组下的最小的k个数
pre在看了大佬[1]这条题目的算法分析之后,发现有些东西大佬并没有写清楚。这里针对这位博主没有写清楚的两个问题,我进行细化阐述。问题1:寻找数组中最小的第k个数问题描述:输入一个长度为n的整数数组,希望获得最小的k个数。算法1:直接做排序,然后取前n个,时间复杂度为 n*log(n),空间复杂度为O(1)简单粗暴,但是如果n大,k相比n小的时候,这个算法就会存在很多事件浪...原创 2018-08-15 18:18:51 · 620 阅读 · 0 评论 -
电话号码分身
pre无聊刷了几条牛客网上的编程题,遇上了这一条,问题不难,但是有一些trick,我觉得比较有意思,这里就记录下解题的过程 问题链接:https://www.nowcoder.com/practice/493d71a992f44554a500ed818056e1a6问题如下题目描述 继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每...原创 2018-07-02 22:43:45 · 1490 阅读 · 1 评论 -
分土地问题(优化遍历问题)
问题题目描述牛牛和 15 个朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成 16 份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地, 作为牛牛最好的朋友,你希望牛牛取得的田地的价值和尽可能大,你知道这个值最大可以是多少吗?输入描述:每个输入包含 1 个测试用例。每个测试用例的第一行包含两个整数 n原创 2018-04-18 15:00:12 · 1123 阅读 · 0 评论 -
合唱团(动态规划问题)
问题描述 题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按原创 2018-04-08 18:38:13 · 1449 阅读 · 0 评论 -
PID算法Demo
pre最近在准备做一些事的时候可能需要用到PID算法,所以今天下午基于网上的一些教程和博客写了一遍,在写的过程中遇到了一些疑惑和坑,这里分享一个整个过程和最后的成果,留作日后参考。需求场景: 锅炉调温 现在有一加热热水锅炉,我们需要他稳定提供70度的热水,当前室温25度,用来加热的水是温度为50度的温水。 锅炉的加热功率能够瞬时加热水到40度,同时功率可以调整,支持从0W到最高瓦数的瞬时切换(这原创 2017-11-02 19:10:44 · 3084 阅读 · 0 评论 -
最大子数组乘积
问题Find the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,-2,4], the contiguous subarray [2,3] has the largest pro原创 2016-10-19 17:41:38 · 421 阅读 · 0 评论 -
圆圈报数-约瑟夫问题
问题概述约瑟夫问题:n个人围成一圈,从第一个人开始报数,数到m的人出圈;再由下一个人开始报数,数到m的人出圈;…输出依次出圈的人的编号。n,m由键盘输入。解题思路1 初始级算法 循环报数,每次数到m的倍数就出局此时指向的人。 可以通过list或者是指针来实现保存当前还在游戏中的人的功能,通过索引去出局人。 但是这样的算法效率很低,基本上要O(m*n)的时间复杂度。2优化算法 不需要通过循环报原创 2016-10-19 16:14:59 · 4838 阅读 · 1 评论 -
KMP算法
最近在刷Hiho的题目,其中一题涉及到了这个算法,在这里我分享一下我对该算法的理解过程。http://blog.youkuaiyun.com/v_july_v/article/details/7041827 这篇文章分析KMP 分析的很透彻,如果想要深入了解该算法,可以直接看这篇博客。KMP是一个字符串匹配的算法,面向的主要问题为在一个字符串中查找匹配的字符串e.g 在原创 2015-12-23 15:14:38 · 451 阅读 · 0 评论 -
赛马问题
之前在面试的时候被问到过这样的问题,不过只是询问了以下25匹赛马,5条跑道决出前三名最少需要多少次。最近又看到这样的博客,所以这里转载以下。文中最精华的部分是从归并排序转化成自定义的筛选算法的过程。转自 http://blog.youkuaiyun.com/gukesdo/article/details/7583131一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同转载 2015-12-08 14:51:55 · 794 阅读 · 0 评论 -
acm79拦截导弹
拦截导弹时间限制:3000 ms | 内存限制:65535 KB难度:3描述某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度。某天,雷达捕捉到敌国导弹来袭。由于该系统还在试用阶段,所以只用一套系统,因此有可能不能拦截所有的导弹。原创 2015-05-20 14:31:16 · 1020 阅读 · 0 评论 -
判断单项链表是否存在环
这个问题是之前去趋势科技面试的时候面试官问的一个问题,当时我没回答的上来,现在在网上找到了解答,现在特在此分享。 最简单的思路是遍历链表,然后针对每一个节点判断在之前的节点中是否出现过,也就是使用一种O(n^2)的算法但是这样的方法显然不是最优的,我们要开始考虑存在环路的单向链表的特性,他是没有结束节点的,这样我们可以确定一个程序结束条件,就是只要找到一个结束节点,那转载 2015-05-15 21:30:03 · 723 阅读 · 0 评论 -
垒骰子
垒骰子赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。原创 2015-04-12 21:34:30 · 3289 阅读 · 1 评论 -
朋友圈转发信息
朋友圈转发信息描述:在一个社交应用中,两个用户设定朋友关系后,则可以互相收到对方发布或转发的信息。当一个用户发布或转发一条信息时,他的所有朋友都能收到该信息。 现给定一组用户,及用户之间的朋友关系。问:当某用户发布一条信息之后,为了让每个人都能在最早时间收到这条信息,这条信息最少需要被转发几次? 假设:对所有用户而言:1)朋友发出信息到自己收到该信息的时原创 2015-03-25 20:52:13 · 2076 阅读 · 0 评论 -
密码截取
密码截取描述:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或ba原创 2015-03-25 20:40:09 · 770 阅读 · 0 评论 -
SPFA
SPFA算法 最短路径优先算法用来计算一个带权连通图中两个顶点之间的最短距离,权值表示距离算法的基本上就是一个BFS 广度优先遍历初始开始节点的距离为0 , 入栈,其他所有顶点的距离标为无穷大BFS开始, 出栈栈顶元素,找出邻接点,用该元素距离加上边的权值与邻接点距离比较,如果新值比较小,那么更新节点,把节点入栈栈为空的情况下得到开始节点到图中所有节点的最短路径。原创 2015-01-15 21:40:57 · 663 阅读 · 0 评论 -
最大流问题
最大流可以简化成以下模型,顶点表示流需要通过的节点,边的容量和边的方向对经过该条边的流的大小加以限制,现在求从开始节点到终点的最大流量是多少最大流问题解法设计一个定理:对于这张图随便且切一刀,把图分成分别包含源节点和终点节点的2部分,最大流的流量不可能超过经过该切线的边的容积的有向和(从源到终点为正向记为正数,从终点到源为逆向,记为负数)这点很容易理解 所有的流都是从原创 2015-01-15 20:06:36 · 860 阅读 · 0 评论 -
背包问题小结
我目前接触到背包分为4类,我将逐类介绍1求背包能装物品价值的最大值这类问题的模型是 存在一个 容量(重量方面 不考虑体积)为M的背包 现在有n个物品 他们的质量为M[i] 价值为V[i],求能装的物品的最大总价值这个是 一个典型的动态规划的题目 对于容积进行动态规划,定义F[i] 为容积为i下的能容纳的最大总价值那么如果在多一个物品k的时候存在这样的关系 F[I原创 2015-01-14 17:20:21 · 928 阅读 · 0 评论 -
acm311完全背包
完全背包时间限制:3000 ms | 内存限制:65535 KB难度:4描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积是c,价值是w。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。本题要求是背包恰好装满背包时,求出最大价值总和是多少。如果不能恰好装满背包,输出NO输入第一行: N 表示原创 2015-01-14 16:32:34 · 647 阅读 · 0 评论 -
acm_49开心的小明
开心的小明时间限制:1000 ms | 内存限制:65535 KB难度:4描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”。今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N 元。于是,他把每件物品规定了一个重要度原创 2015-01-13 15:56:11 · 859 阅读 · 0 评论