算法与LeetCode
Rookie_2020
工作时长一年半的半个程序员
随便写,随便记记
展开
-
LeetCode: Median of Two Sorted Arrays
here are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Example 1: nums1 = [1, 3] nums原创 2017-09-04 12:53:23 · 248 阅读 · 0 评论 -
动态规划-最长子序列
emmmmm,今天去面试没面试到,简历交了被劝退….. 最近毕业季,查重的时候想到了一个算法,就是最长子序列,也就是查询集合A与集合B的交集C且C中的元素顺序严格按照在A与B中的顺序,但不要求元素是连续的。 以前在上课的时候,不认真听,照着书上的伪代码巧了一个迭代方式实现的,所以今天来写一个递归的。递归式: c[i][j]= 0 when i=0||j=0 c[i...原创 2018-06-15 21:58:51 · 762 阅读 · 0 评论 -
抓兔子问题
在我写的那篇深信服在线笔试下面看到一个推荐,是提前批的笔试题目,看了一下,选了要给挺有意思的题目来做。(练习练习算法) 做了蛮久才做出来的,从思考这个问题目的,以及其出现的情况,再到编码+调试错误,花了很长时间…思路虽然理清很快,但是在编写的过程中犯了很多小错误。 可以看出目的是让输入的序列能够满足一定条件即输出Yes or No,而我们的目标就是找到一定能够抓到兔子的条件,而一定能...原创 2018-09-23 16:10:01 · 1019 阅读 · 0 评论 -
01背包
前天在线面试的时候,面试官让我描述我学过的一些算法是怎么运算的,如最长公共子串,我知道其计算过程以及写法,但是突然让我口述过程,描述的时候越来越乱,面试结束后好好的整理了思绪,才觉得应该怎样怎样叙述过程才好,所以打算用通俗易懂的话去写这篇0-1背包,顺便温习一下,以前大二还是大三的时候上算法课不认真听,只是了解了一下这个算法~_~ 0-1背包问题,就是解决,有n 个物品,它们有各自的重量w...原创 2018-10-13 13:12:38 · 296 阅读 · 0 评论 -
KM算法解决不同行不同列求和最大值问题
昨天在大学专业的交流群里看到某个学弟发了张自己打算学的算法列表图,然后瞟了一眼,看到了KM算法,而之前写的一篇深信服在线笔试-2018.9.22,的编程题的第四题:求一个二维数组或者说矩阵的不同行不同列的合的最大值,我采用的是穷举方法,而看到别人说最好的方式是采用KM算法,穷举计算量实在过大了,所以来学习一下KM算法。 (PS:这段话是闲扯)然后就去百度了一下KM算法,看到了很多篇大多都是...原创 2018-10-10 13:07:55 · 6547 阅读 · 2 评论 -
LeetCode:N皇后
在17年的9月份,我写过一个N皇后的博客,当时写的代码是又臭又长又乱,最近闲着,就来做以下LeetCode上中等~困难的题目,于是看到了N皇后,遍再次写了一遍,与17年时做法相同,用BFS,而代码量以及可读性比以前写的好多了,那么废话不多说了。 题目简介: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 ...原创 2018-12-28 15:23:19 · 819 阅读 · 1 评论 -
LeetCode:单词拆分Ⅱ
这道题因为编写的BFS代码超时,我花了挺长时间在于思考,如何解决重复计算,如何编写一个DFS,把惯用的暴力搜索思维改成记忆搜索的一个过程,直至写完这篇博客,我感觉脑子还是有点小乱的,不过代码的流程还是非常清晰的。题目简介: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说...原创 2018-12-29 16:33:15 · 1472 阅读 · 0 评论 -
LeetCode:二叉树的最近公共祖先
这道题想了挺久的,开始没思路,而且看leetcode的评论区几乎都是同一份短小精悍的代码,所以就打算自己先实现一个版本,再去看看分析评论区的代码。题目简介: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是...原创 2019-01-04 09:44:27 · 3791 阅读 · 0 评论 -
LeetCode:二叉树中的最大路径和
这个题在元旦之前看过一会,那时候没思路,今天写着写着突然就有思路了,代码的效率蛮高的。题目简介: 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 6示例 2: 输入: [-10,9,20,...原创 2019-01-02 11:53:43 · 506 阅读 · 0 评论 -
LeetCode:恢复二叉搜索树
前几天写的题了,虽然空间复杂度满足了题目进阶要求,但是感觉效率低还是有改进的空间,先放在这里以后有空了来改。题目简介: 二叉搜索树中的两个节点被错误地交换。 请在不改变其结构的情况下,恢复这棵树。 示例 1: 输入: [1,3,null,null,2] 1 / 3 \ 2 输出: [3,1,null,null,2] 3 / 1 \...原创 2019-01-07 11:22:14 · 347 阅读 · 0 评论 -
LeetCode:单词搜索
这道题虽然简单,但是我尝试用了非广度遍历,想来点其他思路的方法,都失败在一些测试用例了,所以这道题感觉用广度遍历,是最容易解决的方法,以及这道题,让我想起了以前学习写游戏编写的寻路算法or最短寻路算法,而且这次的代码简洁,感觉挺好看的… 题目简介: 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那...原创 2019-01-08 15:33:21 · 1044 阅读 · 3 评论 -
LeetCode: 正则表达式匹配
工作快半年了,好久没上leetcode做题,前几天在知乎上看到一个leetcode的一个题有效数字,大概内容是判断字符串是否是可以用十进制来表示的数字,了解到了一种对我来说没学过的知识,即,正则表达式是可以用状态机(自动机)去表示的(<<编译原理>>相关的书籍似乎都有介绍),而自动机又分NFA与DFA…啪啦啪啦,总之就是了解到了很多东西,然后就想起了这道我以前没解决的题...原创 2019-07-02 09:47:08 · 506 阅读 · 0 评论 -
堆排序
由于14号要去金山wps校招面试(18届直接去面试),于是百度了一下相关面经,看到一道题是讨论快速排序与堆排序的效率什么的…..在此之前,我对堆排序的理解是错误了=_=…之前我以为是每次调一次小根堆或者大根堆,然后就取出根元素,便可以得到一个排序的数组了….但是想想时间复杂度,感觉不对劲,于是就开始动手实现了。 参考了这篇文章对堆排序的讲解:https://www.cnblogs.com...原创 2018-06-12 22:05:28 · 119 阅读 · 0 评论 -
AVL树的实现
3月份的时候为了面试看了些数据结构(目前找到了),其中看到STL相关书上看到avl树、红黑树,于是就打算实现一下avl树,觉得看着挺简单就一直拖着..今天闲着无聊就用python去实现了,不用C++是为了不去管理内存什么的… 之前数据结构关于树的方面的确没有过多的代码实现,在寒假的时候通过SICP上的一些习题,算是了解了下递归,毕竟树的操作几乎都是可以通过递归实现的。 我也不知道这...原创 2018-04-13 20:14:44 · 217 阅读 · 0 评论 -
LeetCode: Reverse Integer
Reverse digits of an integer.Example1: x = 123, return 321 Example2: x = -123, return -321Note: The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed int原创 2017-09-04 14:29:02 · 174 阅读 · 0 评论 -
动态规划-最短路径
斐波那契数列: 分治法(自顶向下):int fb(int n){ if(n==1||n==2) return 1; else return fb(n-1)+fb(n-2);}可以看出每次进入else就进入两个递归式,则会重复计算多次f(1)与f(2)。动态规划算法(自底向上):int fb(int n,map<int,int>&m)//运用原创 2017-05-21 17:33:47 · 694 阅读 · 0 评论 -
LeetCode:Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same ele原创 2017-09-01 16:37:54 · 218 阅读 · 0 评论 -
LeetCode: Add Two Number(已解原先出现的问题)
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it原创 2017-09-03 11:04:13 · 287 阅读 · 0 评论 -
反转链表
前天笔试碰见的题,以前室友也问过我,然而我给出的答案还需要将题目给出的链表结构体添加一些函数才能实现,所以今天我写一个按照原题的要求写,题目给的结构体为:struct mylist{ int val; mylist* next;}; 也就意味着这个链表无前驱指针,哪怎么办呢?我们自己做标记~struct mylist { int val;原创 2017-09-30 11:29:49 · 181 阅读 · 0 评论 -
A*寻路算法(更新cocos2dx版本)
在前天去面试实习生的时候,前台给了一张答题卷填写,因为我也不知道我具体能做什么,对做游戏也是感兴趣,所以就选了游戏开发,第一页大多都是问一些概念与看法,后一页则是一些算法,做了前面的小题,我感觉有几个题是测试你机智否,例如 4 4 10 10,加减乘除如何得24,因为以前室友有问过我类似的,所以很简单就做出来了,而后面一道题则是一道简单的算法,估计就是看你是否会写代码,而最后是A*算法,看到就愣了,原创 2017-09-06 18:01:09 · 991 阅读 · 0 评论 -
最大质因数
在进一个c++交流群的时候,进群需要回答问题,这个问题就是群号的最大质因数,最大质因数也就是是某个数的因数且是质数。 解决方法一:脑袋一转,觉得直接用这个数去除以所有质数,然后不断更新结果,最后得到我们想要的值,于是乎便有了以下的代码,也是最坏的一种方法,因为数据量越大,两个循环跑的次数o(n^2),我们要求的值越大,求的质数也就越多,然后似乎就要跑很久的for循环,所以以下代码似乎跑不完fo原创 2017-12-05 16:23:38 · 5989 阅读 · 0 评论 -
给定数m,求由n位数的组成m的数列(m>=n>0)
在一个C语言群看到有人问问题,图: 于是乎想起了以前做过一个类似的算法题,http://blog.csdn.net/qq_21049875/article/details/77849257,还没写完,不过也不想补坑了(懒),因为在看到这个问题的例如,突然想到了一种方法去解决类似的问题,也就是这道题我的解决思想,也有些dfs的感觉。 想法:数分为类似于第一个结果{5,1,1,1}然后我原创 2017-12-15 17:53:25 · 474 阅读 · 0 评论 -
LeetCode:Combination Sum
Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.The same repeated number may be chosen from C原创 2017-09-05 11:19:18 · 342 阅读 · 0 评论 -
找到字符串第一个只出现过一次的字符
这道题,并不难,在笔试上碰到,我的思路是,两个下标,一前一后,前下标小于等于字符串长度,后下标去遍历字符串,看看是否相等。 到面试的时候,面试官叫我解释我写的算法,并给出了一个例子,然后我自己走了一遍,发现出错了,而错误的原因就是,是没有对重复出现的字符做标记,然后first下标依旧会遍历到重复字符,所以找不到出现过一次的字符。 因为面试有点紧张,当时给出的改法是增添一个列表什么的...原创 2018-03-13 10:23:38 · 786 阅读 · 0 评论 -
根据遍历序列,还原二叉树
在实现之前,自己手算了一遍,以前数据结构没了解清楚的东西,今天手算了一下,发现了规律……就拿这道题来说,前序遍历,我们可以找到根的位置,而中序遍历,我们可以找到根的左右孩子,然后根据前序遍历的结果,我们可以依次找到中序遍历中的哪些节点是根。 于是乎就形成了一种递归关系,如: vector<int>ary1 = { 1,2,4,7,3,5,6,8 }; v...原创 2018-03-13 21:24:07 · 622 阅读 · 0 评论 -
LeetCode:通配符匹配
昨天闲着的时候做了正则表达式匹配(.*)的匹配,感觉手感挺好的,所以今天就顺便做了通配符匹配这道题,这道题相对于正则表达式匹配简单许多。题目简介:给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-...原创 2019-07-02 17:37:42 · 243 阅读 · 0 评论