
刷算法题
淡 默
游戏,最大的害人之处是:你在快乐的浪费时间,丝毫感觉不到浪费的危害。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode20. 有效的括号
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出:...原创 2020-07-25 19:25:53 · 107 阅读 · 0 评论 -
Leetcode19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路:比较直观的思路就是将整个链表遍历并将结果加入到列表中,接着计算列表长度找到倒数第n个节点,并将其前一节点的指针指向该节点的后面一个,就可以了。运用这种思路需要注意链表的长度和n的取值,当n为最后一个或者第一个节点的时候情况比较特殊需要进行专门的处理,A..原创 2020-07-25 16:51:59 · 124 阅读 · 0 评论 -
OJ——39. 24点游戏
大家都玩过扑克牌(A,2,3…T,J,Q,K),我们使用T来表示10,且A取值1,J取值11,Q取值12,K取值13,你的任务是判断给定四张牌,能否通过加减乘除四种运算,使得最后的结果是24。若四张牌为A、5、8、J,则可以这么计算5+J+(A*8)=24。解答要求时间限制:5000ms, 内存限制:64MB输入输入四个字符表示四张牌(A,2,3…T,J,Q,K),用空格隔开。输入到文件末尾结束。输出若能计算出24,输出"Yes”,否则输出"No"。样例输入样例 1复制.原创 2020-07-18 15:11:45 · 2126 阅读 · 0 评论 -
OJ——25. Red And Green
题目描述在美丽的尧山,有一个大广场,50周年校庆的时候Solo就在大广场上见证了史上最壮观的焰火。在广场上有一排方砖是有颜色的,被涂上红色或者绿色,从左到右排列。现在校方要求重新喷涂颜色,但不一定要每一块方砖都重新喷涂,因为校方的目的是:每一块红色的方砖都至少在绿色方砖的左边(也就是每一个红的左边不能有绿的),并且尽量喷涂最少的次数。解答要求时间限制:1000ms, 内存限制:64MB输入输入只有一行,包含一个字符串S,且只包含'R'(代表红色)或者'G'(代表绿色)。我们保证字符串S的原创 2020-07-13 17:33:43 · 2394 阅读 · 0 评论 -
OJ题——11. Olympic Game
题目描述2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下:1、首先gold medal数量多的排在前面; 2、其次silver medal数量多的排在前面; 3、然后bronze medal数量多的排在前面; 4、若以上三个条件仍无法区分名次,则以国家名称的字典序排定。我们假设国家名称不超过20个字符、各种奖牌数不超过100,且大于等于0。解答要求时间限制:1000ms, 内存限制:64MB输入第一行输入一个整数N(0<N<21原创 2020-07-10 09:37:25 · 3215 阅读 · 0 评论 -
剑指Offer 丑数 超详细讲解
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路:我第一个想法是先将前面几个丑数加进去然后从7开始遍历,每一个数都判断它是不是丑数,如果是就将它加进容器然后判断容器的大小是不是等于N。但是判断一个数是不是丑数非常的麻烦,注意题目的意思是只包含质...原创 2019-03-25 21:48:28 · 505 阅读 · 0 评论 -
剑指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.解题思路:首先我们要注意到这个矩阵不是n*n的,所以我们在打印的时候要注意到边界,当我们向右打印到边界时那么上边界的...原创 2019-03-22 16:28:29 · 109 阅读 · 0 评论 -
剑指Offer 栈的压入、弹出序列
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:题目已经给出了栈内数据弹出的一种结果我们只需要判断该结果是不是合理的,所以...原创 2019-03-22 17:16:39 · 121 阅读 · 0 评论 -
剑指Offer 二叉搜索树的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路:首先我们要清楚什么是二叉搜索树,二叉搜索树它要么是一颗空树,要么它的左子树上所有节点的值均小于根节点,右子树上所有节点的值均大于根节点且它的左右子树而是二叉搜索树。认识到这个信息之后,我们要知道后序遍历的顺序是左节点、右节点、根节点;所以...原创 2019-03-22 17:41:06 · 106 阅读 · 0 评论 -
剑指Offer 二叉树中和为某一值的路径
题目描述:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路:由于需要找到一条从根节点到叶节点的路径所以使用DFS来搜索二叉树,可以使用递归的方式去查询也可以使用非递归的方式,我主要介绍非递归的方式。首先我们需要记录下搜索路径上所有的值...原创 2019-03-22 20:19:30 · 108 阅读 · 0 评论 -
剑指Offer 树的子结构
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路:由于树的具体的结构我们无法确定,所以我们无法通过某种遍历方式得到两棵树的数据然后互根据数据去判断B是不是A的子结构。仔细考虑到树的结构我们可以先比较它们的根节点然后比较左右子节点一次递归下去直到A为空或者B为空,AC代码如下:public class Solution { ...原创 2019-03-22 15:04:02 · 130 阅读 · 0 评论 -
剑指Offer 合并两个排序的链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路:常规的解法是将两个链表中的元素先加入到一个公共容器中,然后调用排序算法按照节点的值来排序,这样算法的复杂度比较大,不是非常好。我们可以通过递归的调用来解决这个问题,AC代码如下:public class Solution { public ListNode Merge(...原创 2019-03-22 14:15:28 · 119 阅读 · 0 评论 -
剑指Offer 青蛙跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)因为青蛙一次只能跳一级或者两级台阶,所以对于n级的台阶,青蛙的跳法数=JumpFloor(n-1)+JumpFloor(n-2),这符合斐波那契数列的规律,AC代码如下:public class Solution { public int JumpFloo...原创 2019-03-20 22:06:38 · 162 阅读 · 0 评论 -
剑指Offer 青蛙变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。该题目我在求解时没有想到特别好的办法,后来列出了前面几项找到了规律才求解出来,规律如下:f(1) = 1; f(2) = 2; f(3) = 4; f(4) = 8 ... f(n) = 2*f(n-1);有以上规律后就可以通过递归调用来解决该问题,AC代码如下...原创 2019-03-20 22:17:44 · 166 阅读 · 0 评论 -
剑指Offer 矩形覆盖
题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?显然当n=1时有f(n)=1,n=2时有f(n)=2,n=3时我们可以将它拆分为1+2所以有f(n)=f(1)+f(2),n=4时我们将它拆分为1+3和2+2所以有f(n)=f(3)+f(2),由此可知当n=n时有f(n)=f(n-1)+f(n-2);AC代...原创 2019-03-20 22:47:25 · 158 阅读 · 0 评论 -
剑指Offer 二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。结题思路:由于是一个int型的整数,所以一共只有32位,我们只需要对它的每一位和1进行&操作得到结果,然后将所有的结果相加就可以得到最后的答案了;AC代码如下:public class Solution { public int NumberOf1(int n) { int k = ...原创 2019-03-20 22:59:53 · 128 阅读 · 0 评论 -
剑指Offer 反转链表
题目描述:输入一个链表,反转链表后,输出新链表的表头。思路:我们可以先用一个list将所有的数据存起来然后形成新的链表,但是这样做复杂度太高了,我们可以定义多个变量从而在遍历链表的同时将链表反转,我们用两个变量pre和next来存储临时的链表中的数据,其中pre表示当前节点之前的一个结点,而next和当前节点保持一致这样每次head节点向前移的时候就可以将next节点的后序节点设置为pre。A...原创 2019-03-20 23:12:56 · 130 阅读 · 0 评论 -
剑指Offer 字符串的排列
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。结题思路:很明显这是一个全排列的问题但是我们要注意的是字符元素有可能会发生重复,对于这点我们可以有两种解决方式要么在判断是否交换...原创 2019-03-25 17:49:29 · 187 阅读 · 0 评论 -
剑指Offer 连续子数组的最大和
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...原创 2019-03-25 18:10:18 · 129 阅读 · 0 评论 -
剑指Offer 把数组排成最小的数
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:我首先想到的就是利用数据的全排列然后将他们转化成数字再来比较大小,但是这样做算法的复杂度比较高,后来想到我不需要所有的排列,我们只要最小的一个,所以我们可以利用选择排序的思想每次选出一个最小的元素最后...原创 2019-03-25 19:29:18 · 122 阅读 · 0 评论 -
剑指Offer 二维数组中的查找
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路:由于每一行和每一列都是已经排好序了的,如果在这一行的最后一个元素比目标值还要小的话,那么这一行的所有书都比目标值小;同理如果一列中的第一个元素都比目标值大的话,那么...原创 2019-02-26 21:24:39 · 115 阅读 · 0 评论