算法
算法分析与讲解
August-us
似春起之苗,不见其增,日有所长
展开
-
20200802拼多多笔试题目
20200802拼多多笔试题目对不住的是需要赶在10点前把文章发出去,写的粗糙,后面会完善。第一题python代码示例第二题python代码第三题第四题对不住的是需要赶在10点前把文章发出去,写的粗糙,后面会完善。 拼爹爹的题目感觉出的还是比较有水准的,直接上题目。第一题 大致题意就是玩飞行棋,给出初始位置K(距离终点的距离),然后给出丢了n次骰子。第二行输入n个数,代表骰子的值。如果骰子的值没用完就到了终点,则需要输出paradox。否则,最后输出两个数,分别代表飞行棋最终的位置,和回退的次原创 2020-08-02 21:57:53 · 10373 阅读 · 15 评论 -
20200801猿辅导笔试记录
20200801猿辅导笔试记录重复的课程发奖品 最近比较忙,没太多时间,所以题目写的略微粗略一些。重复的课程输入N表示N节课,接下来输入N行每行输入课程的开始时间和结束时间,求最多的时候有几节课时间重了。输入示例 :41 41 22 33 4输出:2 这个题目描述的就很神奇,题目竟然问的是最少?这里就不纠结题目,仅供讨论。 考虑一个时间段同时有几节课在上,在所有开始和结束的时间中遍历,如果开始一节课则同时上的课数目+1,结束一节课,则同时上的课数目-1。完整通过的人好像都是原创 2020-08-01 23:50:33 · 11127 阅读 · 10 评论 -
leetcode双周赛第31场,如何把做过的题做多
leetcode双周赛第31场,如何把做过的题做多前两题的链接。题目三:字符串的好分割数目(题号:5458)python代码题目四:形成目标数组的子数组最少增加次数(题号:5459)暴力法python代码分治算法python代码一次遍历 因为写的较为细致,所以竟然把四道题分两次写了,希望大家看的时候能多多包涵。前两题的链接。前两题的链接。题目三:字符串的好分割数目(题号:5458)给你一个字符串 s ,一个分割被称为「好分割」 当它满足:将 s 原创 2020-07-26 12:04:24 · 10950 阅读 · 1 评论 -
leetcode双周赛第31场,如何把做过的题做多
leetcode双周赛第31场,如何把做过的题做多题目一:在区间内统计奇数数目(题号:5456)python代码使用range函数的代码题目二:和为奇数的子数组数目(题号:5457)python代码python代码如下 以前没玩过leetcode的比赛,第一次玩,感觉几个题当中还是有值得整理的地方。类似的题目别人也会写,但是大家都是描述题目,然后写代码,希望我的文章能够完整展示思考的过程,希望你能够有助于帮助大家建立良好的思维习惯,提高思维能力。如此,不甚喜悦。 水平有限,思考不值得借鉴的地方也希望原创 2020-07-26 11:29:02 · 10730 阅读 · 0 评论 -
老方法解新题
方法你都会,题都做不对?复杂度O(n2)O(n^2)O(n2)的解法python代码妙用二分查找python代码巧用双指针python代码 这篇文章的特点就是方法都是老方法,但是使用在这个题目上就显得更加的巧妙。刷的题多不是什么值得夸赞的事情,希望大家都能够把做过的题刷精,哪管他如何变化,看过去都是一道题,这才是厉害的。leetcode: 209给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返原创 2020-07-05 09:52:29 · 14253 阅读 · 0 评论 -
动态规划之没有条件创造条件
动态规划之没有条件创造条件 一个问题需要使用动态规划,则需要满足几个条件,这些条件在先前的文章中也都列举过。其中 有些条件是可以适当放缩的,有的条件是绝对需要满足的,那就是无后效性,通俗来说就是当前状态的计算,之前的状态已经是确定的。 有些时候,明明知道一个题需要用动态规划了,但是怎么就好像哪里出了问题,可以静下心来想想,是否是哪个条件略微不满足了。如果不满足了怎么办,那就是改变策略,让算法满足这个条件。 看下面一道题目,题目来源于leetcode174.一些恶魔抓住了公主(P)并将她关在了原创 2020-06-27 12:19:27 · 17616 阅读 · 0 评论 -
将字符串分割为回文子串
将字符串分割为回文子串题目描述DFS解法代码动态规划代码题目描述求解代码题目描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]] 题目要找到所有的回文子串组合方式,看到这个问题很容易就想到了暴力的处理方式,就是从每一个回文子串处深...原创 2020-06-14 14:32:13 · 22011 阅读 · 0 评论 -
亚马逊的一道智力题,悬链线问题
亚马逊的一道智力题,悬链线问题 感觉这阵子网上开始流传一道题,号称是亚马逊的面试题,问题挺有意思。大致是这样。有一根无弹性的绳子,长度是80m,然后两端被挂在50m高的柱子上,问当绳子的中点离地面高度为10m的时候,两个柱子的间距是多少。 很多人乍一看这个问题就知道这是一个悬链线问题。需要用悬链线公式来求解。悬链线公式是由约翰·伯努利求解出来。他的哥哥也是一个数学家,叫雅各比·伯努利。他的儿子也是数学家,叫丹尼·伯努利。这个约翰伯努利的故事非常多,尽管在数学上也还算有名,但是就让我觉得这是一个原创 2020-05-19 14:32:29 · 18161 阅读 · 0 评论 -
二分查找,来一道不是那么复杂的题目
二分查找,来一道不是那么复杂的题目题目描述题目分析C++代码相关文章:[二分查找的特性及应用](https://blog.csdn.net/m0_38065572/article/details/104522499) 二分查找的思想和套路已经了然于心了,但是还是有些问题解决不了?这个时候就可能需要多见一些特殊的用例了。这一次再来一种二分查找的特例。题目描述峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。原创 2020-05-12 16:33:58 · 24241 阅读 · 0 评论 -
2020年腾讯实习生算法笔试题目(感触良多)
2020年腾讯实习生算法笔试题目题目描述代码示例题目描述代码示例题目描述代码示例题目描述代码示例题目描述 参加了腾讯20年的实习生笔试,本来都不打算写这种笔试的题目。但是感觉着产生的想法很多。首先声明我不是什么大佬,下面写的内容没有得到印证的地方还是会出现偏差,希望各位指正。这里就先谈谈感想,如果笔试编程存在多个题目,而这里有的部分题目不是一下做出来,那么这场笔试就已经变成了多目标优化,而事实...原创 2020-04-27 10:50:57 · 41819 阅读 · 28 评论 -
通配符匹配之三种解法
通配符匹配之三种解法题目描述题目分析递归解法python 代码动态规划解法python代码回溯法python代码 这是leetcode上一道很棒的题目,告诉我一个道理,抓不住问题的关键,再优化也只是徒劳。这个题目略微有点难,我在讲解的时候尽量把重点讲的清晰,如果详细展开讲,会浪费太多时间,所以写的略微粗略。题目描述给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘...原创 2020-04-25 19:10:44 · 22422 阅读 · 0 评论 -
洗杯子问题
洗杯子问题问题描述证明 事实上,这是我在面试的时候遇到的一个问题,但是当时没答出来,后面也没有细细的想。然后直到今天有时间,好好的研究了一下,发现原来是这个样子。有时候人的状态真的是很奇怪,可能换个安逸的环境,更加利于思考问题。问题描述 在杯子的内壁残留了一些盐水,现在有定量的水可以用来洗这个杯子,如果洗杯子,才能使得周边残留的盐水浓度最低。 这个问题,当时一接触,凭借自己的直觉,以...原创 2020-04-11 20:05:20 · 23406 阅读 · 0 评论 -
有效括号生成
有效括号生成题目描述题目分析回溯法 合法的括号匹配的问题之前已经讲解过了,现在再看一个括号生成的题目。题目描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]题目分析 既然之前...原创 2020-03-30 21:29:49 · 27869 阅读 · 0 评论 -
扩展欧几里得求数字逆元
扩展欧几里得求数字逆元python求公约数的代码python扩展欧几里得求逆元代码C++扩展欧几里得求逆元代码 欧几里得算法大家应该都听说过,是一个求最大公约数的算法,又叫辗转相除法。大致算法的思路就是,要求a,b两个数的最大公约数,用其中一个数对另一个数取余数,不妨记为b%a,然后让下一轮,b变为a,a再变为上一轮b%a的余数继续重复这样的操作。 这里简单给出一个证明。设最大公约数为t,...原创 2020-03-28 14:11:53 · 31824 阅读 · 0 评论 -
2020年3月23日阿里笔试题
2020年3月23日阿里笔试题题目描述题目分析 这是阿里的第二场笔试,本来觉得没啥好写的,一道排列组合,一道迷宫。没有什么发挥的空间。但是后来在和大家讨论的过程中,把这道题的公司给敲出来了,但是这公式也不能白敲,干脆写一篇文章总结一下。题目描述一共n个人,从中选出任意个人组成一队,我们不妨记为k,再从k个人选出一人做队长。题目分析 这是一个典型的排列组合问题,从n个人选出k个,可...原创 2020-03-25 19:24:16 · 23207 阅读 · 5 评论 -
2020年3月25日阿里笔试题
2020年3月25日阿里笔试题题目描述一python代码题目描述二求公差的python代码 仿佛人生总有一种魔咒,自己做的这场笔试题永远是最难的。不过今天的笔试题,真的难。来看题目。题目描述一给定一个数组n,然后给三个长度为n的数组,可以从这三个数组中选出一个长度为n的数组,第i个位置需要是从给出的三个数组第i个位置选择的,然后要求使这个数组后一项减前一项的绝对值之和最小。输入示例::...原创 2020-03-25 18:59:30 · 29450 阅读 · 25 评论 -
2020年3月24日360笔试题目
2020年3月24日360内推笔试题目一python 代码C++代码第二题python代码C++代码 做了360的笔试,感觉真的是运气很好了,这次的笔试真的算非常简单的了。废话不多说,看题目。题目一题目大概是,有一段DNA,包含两种字符,A和T,科学家可以通过两种方式修改这种DNA,第一种是替换DNA上两个核酸的位置。第二种是直接把字符修改为另一种字符输入两行,第一行是原始的DNA,第...原创 2020-03-24 23:27:11 · 25119 阅读 · 0 评论 -
2020年3月20日阿里内推笔试题
2020年3月20日阿里内推笔试题题目描述题目分析python代码题目描述python代码 因为第一批笔试的缘故加上自己家里买的摄像头还在路上,所以这一次的笔试我是没有参加的,根据网上整理出来的题目描述自己完成了这两道算法题。因为自己这样做,并没有得到验证,如果哪里有误的地方还希望大家能够积极指正。题目描述有一叠扑克牌,每张牌介于1和10之间有四种出牌方法:单出1张出2张对子出...原创 2020-03-21 23:38:35 · 33353 阅读 · 0 评论 -
卡特兰数Catalan number的应用
卡特兰数(Catalan number)的应用使用场景计算公式 卡特兰数是一个特殊的数列,基于这个数列,可以找出很多有趣的问题,对于我们学计算机的而言,与这个数列打交道是不可避免了,举一个很经典的例子。我之前在栈的压入、弹出序列这篇文章中讲到过这个给定入栈序列,判断是否是合法的出栈序列。 与该问题类似的问题有很多,如果我们把问题进一步深入,我们去研究给定n个字符的入栈合法的出栈序列的种数是...原创 2020-03-20 09:32:00 · 18420 阅读 · 0 评论 -
缺失的第一个正数解法
缺失的第一个正数题目描述题目分析python 代码python代码python代码 这个题目是我在leetcode上见过的一个题目,感觉官方解答写的不太好,就特地写一篇文章,自己也加深理解。题目描述给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,...原创 2020-03-17 09:57:52 · 22438 阅读 · 0 评论 -
合法括号对之三种解法
合法括号对之三种解法题目描述题目分析动态规划解法python代码如下栈的方法python代码两遍扫描,空间O(1)O(1)O(1)的解法python代码 这道题目是leetcode上的一个题目,算是一道小题,但是解法很多,特此总结。题目描述 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1示例 2输入“(()”“)(...原创 2020-03-17 09:57:19 · 21329 阅读 · 0 评论 -
寻找两个有序数组的中位数
之前讲解过一道数据流求中位数的题目,但是仔细一想觉得那一次对几种数据结构简单的分析了一下实现,并没有对中位数的题目做一个凝练总结,这一次借这个机会,好好整理一下思路。题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 =...原创 2020-03-12 15:22:22 · 18589 阅读 · 0 评论 -
动态规划之最长回文子串
动态规划之最长最长回文子串问题描述问题分析基于最长公共子串的解法python代码动态规划解法python代码双指针法python代码如下 动态规划解决的问题当中有一个非常经典的问题,叫做最长公共子串问题。这个问题网上已经写了非常非常多了。这里仅给出状态转移方程。阅读完本文后如果还有疑问可以自行查阅资料。lengthi,j={lengthi−1,j−1+1if s1[i]==s2[j...原创 2020-03-06 18:45:51 · 25502 阅读 · 0 评论 -
和为S的连续正数序列(数学技巧,事半功倍)
和为S的连续正数序列题目描述题目分析双指针/滑动窗口法C++代码python代码纯数学技巧法。 数学的基础在算法中的用处大概就是对数字的敏感性了,如果能找到数字的规律,在求解数字的时候往往就能根据规律快速求解。而普通的程序思维相比数学思维,一般就略微显得暴力。题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在...原创 2020-03-04 16:57:34 · 14194 阅读 · 0 评论 -
二分查找的特性及应用
二分查找题目描述题目分析C++代码二分法示例补充 如果我们熟悉二分查找,我们就知道二分查找有一个重要的基础,就是需要有序的顺序表。这里有两点,一个是有序,另一个是顺序表。一般来说,只要是查找的题目,和这两者挂上钩,基本就是二分查找无疑了。因为二分查找过于重要,建议大家自己要能写出代码。题目描述 统计一个数字在一个排序数组中出现的次数。题目分析 如果说从前往后扫描一个数组,统计这个数...原创 2020-03-02 09:40:35 · 15113 阅读 · 0 评论 -
数组中的逆序对
数组中的逆序对题目描述 基础的排序算法,尤其是常见的几种特殊的排序算法,一定要深刻理解,记住特性,甚至要能写出代码。题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007。 ...原创 2020-02-28 10:19:41 · 16886 阅读 · 0 评论 -
再谈斐波那契,把数字翻译成字符串
再谈斐波那契,把数字翻译成字符串题目描述算法分析python代码 学习的过程就是用记忆构建一个知识网的过程,网的密度决定了你容易遗忘的程度。如果担心遗忘,就努力把这个知识的网构建的更密一些。在讲算法设置的大致流程的时候,我通过斐波那契数列讲解了一下算法求解优化的大致过程。从斐波那契数列讲解算法设计的思路这篇文章写得还是蛮精彩的,感兴趣的可以回过去看看。 本文将继续遵循那篇文章的讲解再来谈一...原创 2020-02-26 09:18:23 · 13967 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制题目描述题目分析哈希表法python代码节点分裂法代码总结 自己在看书的过程中学到的一种套路,事实上一开始也都没想到,所以在这里总结一下。题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 以下是p...原创 2020-02-21 14:46:06 · 13809 阅读 · 0 评论 -
链表的平行指针
链表的平行指针原创 2020-02-20 19:47:45 · 13219 阅读 · 0 评论 -
快排扩展,Partition函数的应用(二)
快排扩展,Partition函数的应用问题描述问题分析python代码思维扩展 本文将介绍快排中partition函数的另一种常见的应用,如果对上篇文章感兴趣,可以点击回去看一看:快排扩展,Partition函数的应用(一)。在上一篇文章中,我结合题目讲解了问题的转换过程,如何分析问题把问题转换成我们已知的算法,乃至是排序算法,然后尽可能少的改动已经熟悉的代码解决问题。 我们这篇文章则对p...原创 2020-02-18 15:57:04 · 18873 阅读 · 0 评论 -
顺时针打印矩阵(编程题讲解)
顺时针打印矩阵题目描述题目分析python代码 《剑指offer》 编程题讲解题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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,15,14,13,9,5,6,7,11,10。题目分析 这种题目没...原创 2020-02-17 19:16:37 · 11144 阅读 · 0 评论 -
快排扩展,Partition函数的应用(一)
快排扩展,Partition函数的应用题目描述题目分析python代码扩展分析python代码牺牲空间换时间,时间O(n),空间O(n)的算法基于排序的方法总结 快爬作为平均速度最快的一种内部排序,基础思想是基于分治的。关于分治算法设计思想总结,我在讲解算法设计思路这篇文章讲到过。快速排序中一个非常核心的地方就是partition函数的作用,这个函数支撑了快排的分的过程。我觉得这个函数重要,不...原创 2020-02-16 15:44:05 · 14407 阅读 · 0 评论 -
数字的位运算
数字的位运算问题描述(一)问题分析正向分析python代码扩展分析问题描述(二)题目分析暴力求解位运算求解python代码总结 在做算法题的时候,如果涉及到数字的判断问题,通常来讲,如果能有效利用数字的位操作特征,就会大大的简便运算,甚至有重见天日的功效。 从底层来看,计算机的数据表示是二进制的,在存储上本来就是一个个二进制的位,之所以呈现出我们所理解的数字,这是因为操作系统给我们做了转换...原创 2020-02-14 19:07:18 · 13984 阅读 · 0 评论 -
从斐波那契数列讲解算法设计的思路
从斐波那契数列讲解算法的设计思路从斐波那契到递归带备忘录的递归从递归到动态规划动态规划算法设计思路分治算法设计贪心算法设计斐波那契数列的用途与特性斐波那契数列的用途斐波那契数列的特性算法设计总结从斐波那契到递归 很多人在开始学计算机程序设计类的课程时,都听过一个再经典不过的例子,那就是斐波那契数列,也称兔子数列。为什么叫兔子数列呢,我们知道算法的研究当然是为了解决问题,这个问题越实际,这个算...原创 2020-02-06 19:28:24 · 46338 阅读 · 4 评论 -
字符串空格替换
字符串空格替换需求描述算法分析空格替换代码实现需求描述 给定一个字符串,在字符串中查找某一个特定字符(如空格)然后将其替换为新的字符串(如%20),加入有字符串"This is a demo",经过替换之后的字符串应该变为"This%20is%20a%demo."。算法分析 这个需求也算是相当常见了,但是越简单的问题就越要搞清楚,最好的时间和空间复杂度是什么,同时也要思考透过这个简单的...原创 2020-02-05 15:36:55 · 18638 阅读 · 0 评论 -
数组(字符数组)实现原地循环移位
数组(字符数组)原地循环移位需求描述算法分析reverse函数的代码需求描述 循环移位就是指一个数组假设这个数组的头和尾连接,构成一个圈,每个元素相对自己当前的位置做一个平移。举个例子[5,6,7,8,1,2,3,4][5,6,7,8,1,2,3,4][5,6,7,8,1,2,3,4]左移四位,则左移的结果是[1,2,3,4,5,6,7,8][1,2,3,4,5,6,7,8][1,2,3,4...原创 2020-02-01 15:36:30 · 20351 阅读 · 2 评论 -
和为S的两个数字,编程题解法思路
和为S的两个数字题目描述题目分析乘积最小证明暴力解法优化O(nlgn)O(nlgn)O(nlgn)技巧解法O(n)O(n)O(n)双指针原理探究C++代码实现题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。题目分析 任何一道编程题,拿到题目都是从题干入手,思考题干的信息向我们透露出什么含义。这道题...原创 2020-02-01 10:27:52 · 18896 阅读 · 2 评论 -
二维数组的查找(编程题目)
二维数组的查找题目分析暴力求解O(nlgn)O(nlgn)O(nlgn)python代码如下:技巧法O(n)O(n)O(n)二维二分查找法O(lgn)O(lgn)O(lgn)题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题目分析 任何一...原创 2020-01-26 19:53:09 · 19318 阅读 · 0 评论 -
第一篇博客的感想
发布博客的感想 自从本科找工作以来一直其实有写博客的打算,但是一直以来连笔记都不做的我,再加上本人是个重度拖延症+懒癌患者,所以也就一直拖着了。之后总算是认识到自己的记忆里并没有想象的那么好,干脆向现实低头,开始做笔记了,但是还是没有开始写博客,今天勇敢地迈出第一步,暂且不谈专业,谈一下规划吧,也算是适应一下这种感受。 还是需要开明章义谈一下,以便能够更好的找到同道中人交流,本人是软件工程...原创 2020-01-16 18:30:06 · 16832 阅读 · 4 评论