算法
每天提升一点
这个作者很懒,什么都没留下…
展开
-
查找
word-ladder题目描述题目描述给定两个单词(初始单词和目标单词)和一个单词字典,请找出所有的从初始单词到目标单词的最短转换序列的长度:每一次转换只能改变一个单词每一个中间词都必须存在单词字典当中例如:给定的初始单词start=“hit”,目标单词end =“cog”。单词字典dict =[“hot”,“dot”,“dog”,“lot”,“log”]一个最短的转换序列为"...原创 2020-04-14 10:38:14 · 305 阅读 · 0 评论 -
数组
longest-consecutive-sequence题目描述给定一个无序的整数类型数组,求最长的连续元素序列的长度。例如:给出的数组为[100, 4, 200, 1, 3, 2],最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4你需要给出时间复杂度在O(n)之内的算法题目解析题目要求在一个无序的数组中最长的有序数组的长度,并且时间复杂度为O(n)。所以我...原创 2020-04-13 09:52:27 · 129 阅读 · 0 评论 -
树
sum-root-to-leaf-numbers题目描述题目描述给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:1↵ / ↵ 2 3根节点到叶子节点的路径1->2用数字12代替根节点到叶子...原创 2020-04-13 09:42:24 · 160 阅读 · 0 评论 -
回文字符串
回文字符串题目描述给定一个字符串s,分割s使得s的每一个子串都是回文串返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)例如:给定字符串s=“aab”,返回[↵ [“aa”,“b”],↵ [“a”,“a”,“b”]↵ ]题目解析题目要的得到一个字符串所有的回文子字符串的列表,需要的到所有的解采用深度优先来查找原题地址代码impor...原创 2020-04-09 10:59:50 · 169 阅读 · 0 评论 -
图
图题目描述本题要求复制一个无向图,图中每个节点都包含一个标签和它的邻居列表我们无向图用以下的方法序列化:节点的标签是互不相同的,我们使用“#”作为节点之间的分隔符,使用“,”作为节点标签和节点的节点邻居的分隔符。例如:现在有一个序列化的无向图{0,1,2#1,2#2,2}.这个无向图一共有3个节点,因此序列被#分隔成三部分第一个节点的标签是0,节点0和节点1,节点2之间有边第二个...原创 2020-04-09 10:51:49 · 129 阅读 · 0 评论 -
gas-station
gas-station题目描述环形路上有n个加油站,第i个加油站的汽油量是gas[i],你有一辆车,车的油箱可以无限装汽油。从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时候油箱里面没有汽油。求从哪个加油站出发可以在环形路上走一圈。返回加油站的下标,如果没有答案的话返回-1。注意:答案保证唯一。题目解析题目要求找到一个能保证环形的起点,则...原创 2020-04-08 10:06:22 · 185 阅读 · 0 评论 -
candy
candy题目描述有N个小朋友站在一排,每个小朋友都有一个评分,你现在要按以下的规则给孩子们分糖果:每个小朋友至少要分得一颗糖果,分数高的小朋友要他比旁边得分低的小朋友分得的糖果多你最少要分发多少颗糖果?题目解析题目要求每个小孩至少一颗,相邻的小孩分数高的比分数低的分的多,并且要最少分配糖果,所以我们可以分三步分配:1、每个小孩分配一颗2、从左到有依次遍历,相邻的分数高的比分数低的...原创 2020-04-08 09:56:46 · 333 阅读 · 0 评论 -
max-points-on-a-line
在一条线上最多的点题目描述对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上题目解析首先我们知道三个点在一条线上,分为两种情况:一、其中两个点重合二、两两之间的斜率相等原题地址代码public class Solution { public int maxPoints(Point[] points) { if(points==null|...原创 2020-04-01 11:26:21 · 138 阅读 · 0 评论 -
扑克牌顺子
扑克牌顺子题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13...原创 2020-01-10 10:09:10 · 125 阅读 · 0 评论 -
翻转单词顺序列
翻转单词顺序列题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?题目解析...原创 2020-01-09 14:47:35 · 120 阅读 · 0 评论 -
左旋转字符串
左旋转字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。题目解析题目要求将一个字符串循环移位输出,可以有两种方式,第一种,两个相同字符串拼接,然后截取一个字符串的长...原创 2020-01-09 11:18:54 · 109 阅读 · 0 评论 -
和为S的两个数字
和为S的两个数字题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述输出两个数,小的先输出。题目解析首先题目中给出的是递增排序的数组,所以我们可以使用两边夹逼的反法去得到和正好是s的数,题目还要求如果是多对数字,需要的到乘积是最小的那一对。我们假设 最左端的是 a ,最右端的是b,那么可以得到相...原创 2020-01-08 10:29:35 · 90 阅读 · 0 评论 -
和为S的连续正数序列
和为S的连续正数序列题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?输出描述输出所有和为S的连续正数序列。序列...原创 2020-01-07 10:45:33 · 121 阅读 · 0 评论 -
数组中只出现一次的数字
数组中只出现一次的数字题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。题目解析由题目可以得出 ,题目有两个数字只出现一次,其他的数字出现的次数都是两次,所以我们可以是Map键值对去存放以及去除重复出现的数字。代码public class Solution { public void FindNumsAppearOnce(int...原创 2020-01-06 16:24:34 · 74 阅读 · 0 评论 -
平衡二叉树
平衡二叉树题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。题目解析题目要求判断一棵树是否是平衡二叉树,首先我们需要了解平衡二叉树的数据结构如下,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。所以我们可以使用递归方式去得到左右子树的高度如下代码public class Solution { public boolean IsBa...原创 2020-01-03 14:40:59 · 84 阅读 · 0 评论 -
二叉树的深度
二叉树的深度题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题目解析题目要求求一棵二叉树的深度,首先我们知道二叉树的数据结构,具有父节点,一个左子节点,一个又子节点,我们可以使用递归算法分别求出左子节点的深度和右子节点的深度,最后比较两个深度的大小。代码public class Solution { ...原创 2019-12-31 09:49:45 · 133 阅读 · 0 评论 -
数字在排序数组中出现的次数
数字在排序数组中出现的次数题目描述统计一个数字在排序数组中出现的次数。题目解析题目要求统计一个数字在排序数组中出现的次数,我们可以使用两种方法一、遍历统计二、使用二分法查找当前数字的开始位置和结尾位置,计算两个位置差代码public class Solution { public int GetNumberOfK(int [] array , int k) { ...原创 2019-12-30 13:59:25 · 103 阅读 · 0 评论 -
两个链表的第一个公共结点
两个链表的第一个公共结点题目描述输入两个链表,找出它们的第一个公共结点。题目解析题目要求找出两个链表的公共节点,如果有公共节点则证明两个链表有共同的尾部,因为从公共节点之后的next都相同,那么只需要判断两个链表的长度,长的链表先走,走到长度相等的时候,从 当前开始两个链表一起向后走,直到找到第一个相同的节点。代码public class Solution { public L...原创 2019-12-26 10:41:12 · 90 阅读 · 0 评论 -
第一个只出现一次的字符
第一个只出现一次的字符题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)题目解析题目要求在字符串中找出第一个只出现一次的字符,并返回位置,我们可以分以下两步来完成:第一步:遍历分割整个字符串,用Map存放字符和出现的次数。第二步:遍历整个字符一一与取出存放字符Map相应...原创 2019-12-19 10:39:31 · 110 阅读 · 0 评论 -
丑数
丑数题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。题目解析首先从丑数的定义可知,一个丑数的因子只有2,3,5,那么丑数p= 2x3y3*z。 可以这样理解一个丑数一定是由另一个丑数乘以2或者乘以3或者乘以5得到的。代码public class ...原创 2019-12-18 11:18:21 · 55 阅读 · 0 评论 -
把数组排成最小的数
把数组排成最小的数题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。题目解析题目要求需要判断拼接后的最小数,所以可以分两步来完成,第一步排序(拼接最小排序)第二步拼接。例如 s1,s2两个数如果要排成拼接最小排序,我们可以先拼接 成 s1+s2和 s2+ ...原创 2019-12-17 10:38:30 · 63 阅读 · 0 评论 -
连续子数组的最大和
连续子数组的最大和题目描述给一个数组,返回它的最大连续子序列的和。题目解析题目要求返回一个数组的最大连续的序列的和,其实就是遍历数组每一个位置到数组中当前位置后的连续的路径,每条路径的和都是一个连续的序列和,例如数组 123,它有的连续序列有 1,12,123,2,23,3。代码public class Solution { public int FindGreatestSum...原创 2019-12-13 16:32:20 · 115 阅读 · 0 评论 -
最小的K个数
最小的K个数题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。题目解析题目给出一个整数数组,和需要得到最小k位数,首先我们需要将这个数组排序,然后去前k位的数。再这里我使用的事冒泡排序法:冒泡排序法的原理就是通过遍历的方法,一趟一趟的遍历,每一趟找到一个当前未排序的数组中最小的数,放在已排序的数组的尾部。代...原创 2019-12-11 10:11:45 · 99 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目解析题目中要求找到某一个超过数组长度一半的数字,即是需要我们找到一个数字的在数组中出现的次数是在当前数组中出现次数最多的。所以我们可以分以下几...原创 2019-12-10 10:00:27 · 64 阅读 · 0 评论 -
字符串的排列
字符串的排列题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。题目解析根据题目要求需要的到一个字符串中所有的字符排序第一步、遍历出所有可能出现在第一个位置的字符(即:依次将第一个字符同后面所有字符交换);第二步、 固定第一个字符,求后面字符的排列(即:在第...原创 2019-12-09 11:22:51 · 85 阅读 · 0 评论 -
二叉搜索树与双向链表
二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题目解析题目要求将二叉树转换成一个排序的双向链表。首先我们知道搜索二叉树的数据结构是 左子节点从上到下依次递减,右子节点从上到下依次递增,可以分两步完成第一步:利用递归 / 非递归中序遍历,存在一个数组 or 一个队列第二部:更新队列里的结点的 ...原创 2019-12-06 11:30:01 · 71 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目解析题目需要复制一个链表,并且返回新链表的head,首先我们知道当前链表的数据结构是,当前节点有节点值以及两个指针,一个指向下一个节点的指针以及一个指向...原创 2019-12-05 11:12:34 · 59 阅读 · 0 评论 -
二叉树中和为某一值的路径
二叉树中和为某一值的路径题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)题目解析从题目可以了解到,需要从一个二叉树中找到等于输入值的所有的路径,路径的定义为从根节点开始往下一直到叶节点(即先序遍历的方式)代码public cl...原创 2019-12-04 10:38:37 · 52 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目解析题目要求判断一个数组是不是某二叉树的后续遍历的结果,首先我们知道二叉搜索树的数据结构是,左子节点的值小于父节点的值,右子节点的值大于父节点的值。并且二叉树的后续遍历的顺序是先左子再右子最后再父节点。所以我们可以把当...原创 2019-12-03 10:28:18 · 114 阅读 · 0 评论 -
从上往下打印二叉树
从上往下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目解析从题目可以看出是先序遍历方式,先遍历父节点再遍历左子节点最后再遍历右子节点。代码public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { //先需...原创 2019-12-02 10:06:43 · 65 阅读 · 0 评论 -
栈的压入、弹出序列
栈的压入、弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的题目分析根据题目首先我们可以得到两个序列,一个压入序列,一个弹出序...原创 2019-11-27 10:22:31 · 75 阅读 · 0 评论 -
包含min函数的栈
包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。题目解析题目要求是得到栈中所含的最小元素并且时间复杂度为O(1),表示一取就是当前栈的最小最小元素,我们可以考虑用两个栈来存放数据,一个是正常的元素栈,一个是最小元素栈。放入的规则是,正常元素栈每次都直接放入栈顶,最小元素栈则需要比较当前值比最小元素栈的栈顶的数据...原创 2019-11-26 10:07:31 · 68 阅读 · 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,15,14,13,9,5,6,7,11,10.题目解析题目要求我们顺时针的输出一个矩阵,首先我们可以先判断一个矩阵能够顺时针输出的圈数,首先判断是...原创 2019-11-25 11:43:49 · 75 阅读 · 0 评论 -
二叉树的镜像
二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树题目解析题目要求我们将一颗二叉树变化为源二叉树。通过图片描述我们可以知道,所谓的源二叉树其实就是将一个二叉树所有的左右子交换后的二叉树 。所以我们可以用递归的方式一层一层的从上到下的交换左右子。代码public class Solution { public void Mi...原创 2019-11-22 09:45:47 · 74 阅读 · 0 评论 -
树的子结构
树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)题目解析首先我们知道二叉树的数据结构为父节点,左子节点,右子节点,题目要求判断 B是不是A的子结构,则需要我们证明A的某一部分是不是跟B相同(每一个节点的值都相同)。所以我们需要从A的父节点开始从上到下依次判断B是不是与某一部分重合。代码public class Solution...原创 2019-11-21 11:08:31 · 66 阅读 · 0 评论 -
合并两个排序的链表
合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目解析题目给出了两个单调递增的链表,需要我们合成一个链表,并且这个链表还是满足单调递增,首先我们知道链表的数据结构是,当前节点有指向下一个节点的指针,所以我们我们可以从两个链表的头结点开始,假设两个链表的头结点分别为list1、list2,合成的链表,假设为current...原创 2019-11-20 10:59:55 · 78 阅读 · 0 评论 -
反转链表
反转链表题目描述输入一个链表,反转链表后,输出新链表的表头。题目解析从题目了解到,最后需要得到一个反转链表,并且输出链表的表头,我们知道链表的数据结构为,当前节点有下一个节点的指针,反转链表的表头就是当前链表的表尾。代码public class Solution { public ListNode ReverseList(ListNode head) { if(...原创 2019-11-19 11:35:40 · 81 阅读 · 0 评论 -
链表中倒数第k个结点
链表中倒数第k个结点题目描述输入一个链表,输出该链表中倒数第k个结点。题目分析看到链表,首先我们应该想到它的数据结构为,当前节点有指向下一个节点的指针,题目中需要找到倒数第k个节点,所以我们可以想到如何找到它在正数中的位置,假设链表总长度count,那么倒数第k的位置,它的正数位置为count-k的位置,所以我们只需要计算链表的总长度,然后依次找到当前节点。代码public class...原创 2019-11-18 15:27:01 · 80 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目解析由题目了解到要让一个数组的奇数位于前半部分,偶数位于后半部分,并且奇数和奇数,偶数和偶数的相对位置不变。我们需要遍历这个数组,把所有的奇数往前移,偶数往后移代码public ...原创 2019-11-15 15:00:11 · 81 阅读 · 0 评论 -
矩形覆盖
矩形覆盖题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?题目解析由题目可知 矩形的形式有两种,21和12可以理解为高度为1和高度为2的矩形,最后需要使用这个两种矩形叠成2n的矩形,首先我们知道n等于1的时候只有一种方式(21),n等于2的时候有两种方式两个高度为1的叠加,以及两个高度为2的横向扩展,n等于...原创 2019-11-13 11:32:33 · 79 阅读 · 0 评论