
算法
文章平均质量分 61
ljh0302
软件研发工程师
后端Java,前端Angular
展开
-
Leetcode-Dynamic Programming题目总结
动态规划Dynamic Programming:通过把原问题分解为相对简单的子问题的方法来求解复杂问题的方法。把求解的问题分成多个阶段或多个子问题,然后按照顺序求解各子问题。前一子问题的解,为后一问题的求解提供了有用信息。依次解决各个子问题,最后一个阶段的解就是初始问题的解。动态规划问题,大致可以通过以下4个步骤:1)划分状态,即划分子问题2)状态表示,即如何让计算机理解子问题。...原创 2020-03-17 11:21:11 · 638 阅读 · 0 评论 -
Leetcode-backtracking题目总结
Leetcode-78.Subsets (全组合问题)Given a set ofdistinctintegers,nums, return all possible subsets (the power set).Note:The solution set must not contain duplicate subsets.Input: nums = [1,2,3] O...原创 2020-02-28 12:10:40 · 406 阅读 · 0 评论 -
[leetcode]-30-Substring with Concatenation of All Words
题目:You are given a string,s, and a list of words,words, that are all of the same length. Find all starting indices of substring(s) insthat is a concatenation of each word inwordsexactly once a...原创 2020-02-05 16:10:24 · 546 阅读 · 0 评论 -
[leetcode]-238. Product of Array Except Self
题目:Given an arraynumsofnintegers wheren> 1, return an arrayoutputsuch thatoutput[i]is equal to the product of all the elements ofnumsexceptnums[i].Example:Input: [1,2,3,4]Out...原创 2020-02-05 15:17:02 · 210 阅读 · 0 评论 -
[leetcode]-523-Continuous Subarray Sum
题目:Given a list ofnon-negativenumbers and a targetintegerk, write a function to check if the array has a continuous subarray of size at least 2 that sums up to a multiple ofk, that is, sums up ...原创 2020-02-03 20:13:56 · 285 阅读 · 0 评论 -
[leetcode]-525. Contiguous Array
题目:Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.Example 1:Input: [0,1]Output: 2Explanation: [0, 1] is the longest contiguous subarray wi...原创 2020-02-03 20:07:32 · 192 阅读 · 0 评论 -
[leetcode]-954. Array of Doubled Pairs
题目:Given an array of integersAwith even length, returntrueif and only if it is possible to reorder it such thatA[2 * i + 1] = 2 * A[2 * i]for every0 <=i < len(A) / 2.示例:Input: [4,...原创 2020-02-01 20:22:34 · 209 阅读 · 0 评论 -
[leetcode]-10 Regular Expression Matching
描述:Given an input string (s) and a pattern (p), implement regular expression matching with support for'.'and'*'.'.' Matches any single character. '*' Matches zero or more of the preceding eleme...原创 2020-01-10 20:59:04 · 181 阅读 · 0 评论 -
剑指Offer-序列化反序列化二叉树
转自http://cuijiahua.com/blog/2018/01/basis_61.html一、前言本系列文章为《剑指Offer》刷题笔记。刷题平台:牛客网书籍下载:共享资源二、题目请实现两个函数,分别用来序列化和反序列化二叉树。1、思路这道题思路简单,使用前序遍历来序列化和发序列化即可。只要自己写的程序格式对应上即可。可以使用$符号表示NULL,同时每个结点之间,需要添加逗号,即','进行...转载 2018-06-15 10:56:59 · 197 阅读 · 0 评论 -
剑指Offer-把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。算法思路1、定义字符串比较函数compare2、将整数数组转化成字符串数组,利用冒泡排序,得到排序后的字符串数组。class Solution {public: bool compare(string a...原创 2018-06-25 14:24:28 · 283 阅读 · 0 评论 -
剑指Offer-数组中的逆序对
链接:https://www.nowcoder.com/questionTerminal/96bd6684e04a44eb80e6a68efc0ec6c5来源:牛客网看到这个题目,我们的第一反应是顺序扫描整个数组。每扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成了一个逆序对。假设数组中含有n个数字。由于每个数字都要和O(n)这个数字比较,因此这个...原创 2018-06-25 15:40:29 · 273 阅读 · 0 评论 -
剑指Offer-链表中环的入口节点
判断链表中是否有环使用追赶的方法,设定两个指针slow、fastslow、fast,均从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fastfast遇到NULLNULL退出。slow、fastslow、fast,均从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fastfast遇到NULLNULL退出。其中主要的思想就是“环形相遇追及问题”,理解上...转载 2018-06-26 10:14:19 · 3342 阅读 · 3 评论 -
网易笔试题-堆棋子
转自:https://blog.youkuaiyun.com/u013616945/article/details/77750698题目小易将n个棋子摆放在一张无限大的棋盘上。第i个棋子放在第x[i]行y[i]列。同一个格子允许放置多个棋子。每一次操作小易可以把一个棋子拿起并将其移动到原格子的上、下、左、右的任意一个格子中。小易想知道要让棋盘上出现有一个格子中至少有i(1 ≤ i ≤ n)个棋子所需要的最少...转载 2018-06-27 11:29:26 · 579 阅读 · 0 评论 -
《程序员面试金典》--寻找二叉树中两个节点的第一个公共祖先(三种情况)
转载地址:https://blog.youkuaiyun.com/zdplife/article/details/49424975/****************************************************************************************************************题目描述:给定一颗二叉树,以及二叉树中的两个节点,找出这...转载 2018-07-10 10:10:25 · 672 阅读 · 0 评论 -
判断两个矩形是否重叠
判断两个矩形是否重叠关于如何判断两个矩形重叠,这是我在实际项目开发当中曾经遇到过的问题:“判断图像中检测到的两个人脸框矩形是否有重叠部分,并计算重叠大小,从而确认是否为同一个人脸”。后来,在浏览博客时,也发现也有人将这个问题当做面试题目,并进行过讨论,但是,列出的代码过于繁杂,不敢恭维。所以,写下这篇博文,并贴出代码,供大家参考。前提两个矩形的边均与x轴或y轴平行,即轴对齐的矩形将第一个矩形记做A...转载 2018-07-10 20:10:24 · 1669 阅读 · 1 评论 -
经典算法面试题
1、如何判断链表中是否有环?如果有环的话,如何找出环的入口设置两个指针,一个fast指针,一个slow指针,fast指针每次走两步,slow指针每次走一步,若fast和slow相遇,则链表有环设x为slow走的步数,则2x = x + n,n为环的大小,则相遇时,slow走了n步则表头到环入口的距离 = 相遇点到环入口的距离于是在相遇点,将fast指针移动到表头,每次走一步,和sl...原创 2018-07-20 16:56:40 · 1393 阅读 · 0 评论 -
剑指Offer-二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。首先我们给出二叉搜索树的定义:二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值...原创 2018-05-31 14:47:54 · 215 阅读 · 0 评论 -
剑指Offer-字符串的匹配
转载地址:https://www.cnblogs.com/AndyJee/p/4700373.html题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不...转载 2018-06-07 14:13:49 · 390 阅读 · 0 评论 -
NP-完全性理论总结
算法课介绍了NP-完全性理论的方面的知识,感觉还是比较难理解的,在这里做一个总结。课程ppt的链接:http://download.youkuaiyun.com/detail/ljh0302/97014591、图灵机了解NP-完全性理论之前必须首先了解什么是图灵机。(图片来源于网络)所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个个的小方格,每个方格有不同的字符。原创 2016-12-04 17:58:00 · 1190 阅读 · 0 评论 -
概率算法总结
一、分类1)数字算法利用随机性求数字问题的近似解,概率算法获得的答案是近似的,通常执行时间越长,精度就越高,误差就越小。举例:Pi值的估计;数字积分(计算定积分的值);概率计数(求集合X的势)2)Sherwood算法总是给出正确的答案。减少消除好的和坏的实例之间的差别,即平滑不同输入实例的执行时间。比起确定性算法A,概率算法B为取得均匀性增加了时间成本S(n),所以平均的执行时原创 2016-11-22 09:51:27 · 3369 阅读 · 0 评论 -
八皇后问题
八皇后问题原创 2016-11-22 10:47:18 · 1034 阅读 · 0 评论 -
【转载】leetcode 53. Maximum Subarray(DP动态规划问题)
问题描述: Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] ...转载 2018-05-17 11:30:45 · 185 阅读 · 0 评论 -
剑指Offer-丑数
转载地址:https://www.jianshu.com/p/9598e96ea6b6题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。习惯上把1当做第一个丑数解法一:判断一个数是否是丑数:bool isUglyNumber(int number) { while (number % 2 == 0) { numbe...转载 2018-06-04 19:01:53 · 192 阅读 · 0 评论 -
剑指offer——二叉树的下一个节点
我的代码实现:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), nex...转载 2018-06-12 10:21:57 · 321 阅读 · 0 评论 -
剑指Offer-树的子结构
这道题题目的思路总结:1)二叉树B当前节点值等于二叉树A当时节点值,则递归地去匹配B的左子树和A的左子树,B的右子树和A的右子树2)二叉树B当前节点值不等于二叉树A当时节点值,则考虑B是否是A的左子树的子结构,或者B是A的右子树的子结构开始的时候我试图用一个函数的递归解决这个问题,但是我发现,空树不是任何子树的子结构,所以终止条件有些问题,下面的文章用了两个函数,就很好的解决了这个问题。下面转自h...转载 2018-05-29 14:46:04 · 163 阅读 · 0 评论 -
剑指Offer-按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。整体思路看到这个题目的第一个想法是和按行打印二叉树很相似,而按行打印二叉树是利用队列来实现的;但是这里要求按之字形,于是考虑用两个栈来实现。两个栈分别存放奇数行的节点和偶数行的节点,考虑到奇数行从左到右打印,偶数行从右到左打印;1)初始的时候栈st...原创 2018-06-12 15:37:40 · 202 阅读 · 0 评论 -
剑指Offer-包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。基本思路:利用两个栈,一个数据栈,一个辅助栈(保存当前栈中数据的最小值)数据栈和辅助栈中任何时候元素个数相同,辅助栈栈顶的元素对应数据栈当前所有数据的最小值push操作最重要的操作,如果进栈元素value小于辅助栈栈顶元素,则value进入辅助栈;否则辅助栈的栈顶元素min再次进入一次辅助栈,成为新的栈顶元素数据栈和辅助...原创 2018-05-30 14:52:31 · 132 阅读 · 0 评论 -
剑指Offer-二进制中1个个数
转自https://www.cnblogs.com/AndyJee/p/4630568.html题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:很明显,这道题考察的是位运算。1、依次将整数右移,判断整数最后一位是否为1(&1);问题:如果该整数为负数,则会陷入无限循环,为什么?因为负数右移的时候,左边补1,整数右移过程中不可能为0,因此会陷入无限循环。补码的移位...转载 2018-05-30 18:36:34 · 200 阅读 · 0 评论 -
剑指Offer-两个链表的第一个公共节点
一、题目:两个链表的第一个公共节点题目:输入两个链表,找出它们的第一个公共结点。 链表结点定义如下,这里使用C#语言描述: public class Node { public int key; public Node nextNode; public Node(int key) { this...转载 2018-06-06 17:02:46 · 1079 阅读 · 0 评论 -
剑指Offer-打印出二叉树中结点值的和为输入整数的所有路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。深度优先搜索。使用前序遍历,使用两个全局变量allpath和tmp,allpath来存放最终所有满足的路径,tmp用来存放临时的一条路径。每次遍历,我们先把root的值压入tmp,然后判断当前root是否同时满足:等于当前数值;左子树为空;右子树为空。...原创 2018-06-06 18:33:30 · 227 阅读 · 0 评论 -
剑指Offer-机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?算法思路定义和方格大小一样的布尔值矩阵visit...原创 2018-06-13 18:27:58 · 185 阅读 · 0 评论 -
剑指Offer-矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了...原创 2018-06-13 18:37:16 · 211 阅读 · 0 评论 -
剑指Offer-栈的压入弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:一个数据栈stack1,一个辅助栈stack2(1)如果下一个弹出序列中的数字刚好是...原创 2018-05-31 13:06:14 · 189 阅读 · 0 评论 -
求方幂模s = a^j mod p
在编写程序时,经常求方幂模,即s = a^j mod p而如果先求a^j,则可能会导致溢出,于是采用了一种避免溢出的算法ModularExponent伪代码:ModularExponent(a, j, p){ //求方幂模s=aj mod p, 注意先求aj可能会溢出 s ← 1; while j>0 do { if (j is odd) s ← s·a mod p; a原创 2016-12-03 11:44:29 · 764 阅读 · 0 评论