![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指
文章平均质量分 81
chenxy132
这个作者很懒,什么都没留下…
展开
-
剑指笔记-二叉树中和为某一值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:先保存根节点,然后分别递归在左右子树中找目标值,若找到即到达叶子节点,打印路径中的值。二叉树的好像大部分都是用的递归的思想,这里比较重要的是找到递归结束的条件,特别注意。代码:public class Solution { ...原创 2019-09-09 17:10:23 · 161 阅读 · 0 评论 -
leetcode笔记——137只出现一次的数字Ⅱ&剑指56(2)
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例2:输入: [0,1,0,1,0,1,99]输出: 99思路:网上百度的大神的代码,原文链接:https://blog.csd...原创 2019-04-30 09:45:14 · 107 阅读 · 0 评论 -
剑指笔记——56 数组中数字出现的次数&leetcode136,137
题目1:数组中只出现一次的两个数字。要求时间复杂度是O(n),空间复杂度是O(1)。思路1:以下是剑指中的思路:在这道题中我们利用了异或的思想。任何一个数字异或它自己都等于0 (异或相同为0不同为1)。那么如果我们从头到尾异或数组中的每个数字,那么最终的结果刚好是那个只出现一次的数字。我们可以使用某种方法将数组分为两部分,每一部分都包含有一个只出现一次的数字,那么分别对这两个子数组进行异或,就...原创 2019-04-30 09:48:19 · 233 阅读 · 0 评论 -
剑指笔记——61 扑克牌中的顺子
题目:用数组记录五张扑克牌,将数组调整为有序的,若0出现的次数>=顺子的差值,即为顺子思路:由剑指中的思路可知,我们可以把5张牌看成5个数字组成的数组,将大小王定义成特殊的数字0.我们需要做的有3件事:(1)把数组排序(2)统计数组中0的个数(3)统计排序之后的数组中相邻数字之间的空缺总数。如果空缺总数小于或者等于0的个数,那么这个数组就是连续的,反之则是不连续。代码:publi...原创 2019-05-05 10:07:03 · 81 阅读 · 0 评论 -
剑指笔记——60 n个骰子的点数
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能出现的概率思路:由剑指中的思路可知,n个骰子的点数之和最小值为n,最大值为6n.所有点数的排列数为.要解决这个问题,我们需要先统计每个点数出现的次数再除以,就可以求出每一个点数出现的概率。可以使用递归的思路,但是递归中会出现很多重复的计算,会使得在n变大后性能变慢。因此在这里使用循环的思路。可以考虑使用两个数组...原创 2019-05-05 09:34:59 · 168 阅读 · 0 评论 -
LeetCode笔记——151翻转字符串的单词&&剑指58反转字符串
题目:给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good ...原创 2019-05-04 10:01:32 · 197 阅读 · 0 评论 -
剑指笔记——53.在排序数组中查找数字&leetcode268
题目1:统计一个数字在排序数组中出现的次数。思路1:剑指中提到的思路如下:我们可以先使用二分查找找到一个给定数字,然后在该给定数字的左右两边顺序扫描,分别找到第一个给定数字和最后一个给定数字。这种思路和从头到尾顺序扫描数组的效率是一样的,时间复杂度是O(n)。我们可以先使用二分查找找到第一个给定数字的下标和最后一个给定数字的下标,两者相减就是出现给定数字的次数。使用二分法找到给定的数字k时,先...原创 2019-04-28 16:17:24 · 158 阅读 · 0 评论 -
剑指笔记——44 数字序列中的某一位数字
题目:数字序列中某一位的数字数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。思路:根据剑指中的分析,可以举个例子找下规律。比如要找序列的第1001位是多少,序列的前10位是只有1位的数字,显然第1001位在这10个数字之后,因此这10个数字可以直接跳过...原创 2019-04-19 10:40:51 · 98 阅读 · 0 评论 -
剑指笔记——50 第一个只出现一次的字符
题目1:字符串中第一个只出现一次的字符在字符串中找出第一个只出现一次的字符。如输入”abaccdeff”,则输出’b’。思路1:剑指中的思路如下:我们扫描两次字符串。第一次的时候统计每一个字符在字符串中出现的次数;第二次的时候扫描字符串,第一个出现次数为1的字符就是我们要找的。在统计字符次数的时候我们使用一个简单的哈希表。字符是一个长度为8的数据类型,因此一共有256中可能。因此我们创建一个...原创 2019-04-23 21:59:08 · 339 阅读 · 0 评论 -
剑指笔记——57 和为s的数字
题目1:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路1:根据剑指中的思路,我们可以定义两个指针,一个指向数组开头,一个指向数组结尾,如果当前两个数字的和大于给定的和,就把第二个指针向前移动一位,如果小于给定和,就将第一个指针向后移动一位。以下的代码会输出乘积最小的一对。代码来源:https://blo...原创 2019-05-03 10:55:50 · 76 阅读 · 0 评论 -
LeetCode笔记——136只出现一次的数字&剑指56(1)
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4思路:我是按照分组标签的形式做题的,这道题属于哈希表一类的,但是不知道怎么用哈希表写程序...原创 2018-09-04 09:53:43 · 111 阅读 · 0 评论 -
剑指笔记——63 圆圈中最后剩下的数字
题目:约瑟夫环问题。0, 1, … , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。思路1:根据剑指中的思路,可以使用环形链表来模拟圆圈。这种方法的话,每删除一个数字需要m步计算,共有n个数字,因此总的时间复杂度是O(mn),空间复杂度是O(n).代码1:public int LastRemaining_Solution(i...原创 2019-05-06 20:19:04 · 213 阅读 · 0 评论 -
剑指笔记—矩阵中的路径
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了...原创 2019-08-27 11:04:13 · 91 阅读 · 0 评论 -
leetcode笔记——113路径总和Ⅱ&剑指34题
题目:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 /...原创 2018-12-25 09:43:19 · 154 阅读 · 0 评论 -
leetcode笔记——103二叉树的锯齿形层次遍历
题目:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路:下面...原创 2019-06-25 17:16:00 · 104 阅读 · 0 评论 -
LeetCode笔记——53最大子序和&剑指42
题目:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。该题属于一个最大连续子序列问题:输入是具有n各浮点数的...原创 2019-04-18 16:43:44 · 84 阅读 · 0 评论 -
剑指笔记——54.二叉树的第K大节点
题目:给定一棵二叉搜索树,请找出其中第K大的节点。思路:按照剑指中的思路可知,对于二叉搜索树来说,中序遍历是递增排序的,我们只需要求出该二叉树的中序遍历,在找到第K个节点就可以了。代码来源:https://blog.csdn.net/snow_7/article/details/51926574代码:public TreeNode KthNode(TreeNode pRoot, int...原创 2019-04-29 09:56:44 · 242 阅读 · 0 评论 -
leetcode笔记——138复制带随机指针的列表&剑指35
题目:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。这里需要注意的是深度拷贝和浅度拷贝的区别。前度拷贝是直接复制,拷贝的是原始对象的引用地址,在队中仍然公用一块内存;深度拷贝是为新对象在堆中重新分配一个内存,所以对新对象的操作不会影响旧对象。思路:这个是剑指上的复杂链表复制的题目。网上代码1的思路是首先复制原始链表...原创 2019-02-22 10:58:54 · 104 阅读 · 0 评论 -
leetcode笔记——145 二叉树的后序遍历
题目:给定一个二叉树,返回它的 后序遍历思路:这个题之前总结二叉树的相关知识的时候写过,但是后序遍历比较难,所有在这里单独把后序遍历拿出来总结下。以下的代码来自leetcode评论中大神的代码,分别使用递归,迭代和另外一种方法进行后序遍历。代码:(1)递归写法class Solution { public List<Integer> res = new Arra...原创 2019-05-17 11:18:05 · 132 阅读 · 0 评论 -
剑指笔记——66.构建乘积数组
题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。其中A[i] = 1。不能使用除法思路:根据剑指中的思路,可以使用矩阵法求解,将矩阵分为上三角矩阵和下三角矩阵,分别求解乘积。代码:public int[] multiply(int[] A) {int l...原创 2019-05-11 15:42:04 · 107 阅读 · 0 评论 -
剑指笔记——65 不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号思路:根据剑指中的思路,我们可以 用位运算代替二进制的加法运算。第一步不用考虑进位对每一位相加。这一步的结果和两数异或的结果相同;第二步进位相当于是两个数进行与运算再向左移动一位;第三部将前两个步骤的结果相加,知道不产生进位为止。代码:public int Add(int num1,int num2) {w...原创 2019-05-11 10:06:51 · 90 阅读 · 0 评论 -
剑指笔记——64 求1+2+...+n
题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)思路:这个题目不能使用循环,递归也需要用if语句或者条件判断语句来判断是继续递归还是终止递归。剑指中提供的思路好像不太适合java,我在网上找了大神的思路,原文链接:https://blog.csdn.net/ouyangyanlan/articl...原创 2019-05-07 09:58:13 · 92 阅读 · 0 评论 -
剑指笔记——63 股票的最大利润&leetcode121
题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5, 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。思路:根据剑指中的思路,我们可以先定义一个函数diff(i)为当卖出价为数组中的第i个数字时可能获得的最大利润。显然在卖出价格固定时,...原创 2019-05-07 09:36:13 · 434 阅读 · 0 评论 -
剑指笔记——49 丑数&leetcode264
题目:把只包含因子2,3,5的数称作丑数。求出从小到大顺序的第1500个丑数。思路:这道题是leetcode中的264题。剑指中的思路如下:我们可以一个数一个数来判断是不是丑数,但是这样效率比较低。根据丑数的定义,丑数应该是另一个丑数乘以2,3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字都是排序好的丑数,每一个丑数都是前面的丑数乘以2,3,5得到的。因为已有的丑数是按照...原创 2019-04-23 11:20:21 · 99 阅读 · 0 评论 -
剑指笔记——48 最长不含重复字符的子字符串
题目:最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。例如,在字符串中”arabcacfr”,最长非重复子字符串为”acfr”,长度为4。思路:这个很奇怪,这个题和leetcode中的第三题好像是一样的,但是把这个代码放在leetcode中总是报错。。。。先把剑指的思路放在这里:整体上使用动态规...原创 2019-04-23 10:32:08 · 97 阅读 · 0 评论 -
LeetCode笔记——160相交链表 &&剑指52
题目:编写一个程序,找到两个单链表相交的起始节点。例如,下面的两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3在节点 c1 开始相交。注意:如果...原创 2018-09-07 16:12:28 · 107 阅读 · 0 评论 -
剑指笔记——26.树的子结构&LeetCode572另一颗树的子树
题目:输入两棵二叉树A和B,判断B是不是A的子结构。要注意二叉树的值是double值。思路:整个分为两步。第一步在树A中查找与B中的根节点的值一样的节点,这实际上就是树的遍历:第二步是判断树A中以R为根节点的子树是不是和树B具有相同的结构。在整个过程中需要时刻注意节点是否为空。除此之外,由于节点的值都是double类型的,不能直接使用==比较大小,在这里专门写了一个函数Isequal来判断两个...原创 2019-04-07 10:24:13 · 222 阅读 · 0 评论 -
剑指笔记——25 合并两个有序链表
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:这个题和leetcode中的21题。在该题中要注意两个问题:(1)在写代码之前要注意想清楚合并的过程(2)注意程序的鲁棒性,遇到一些特殊...原创 2019-04-07 09:06:19 · 76 阅读 · 0 评论 -
剑指笔记——33.二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:在这个题中要注意是二叉搜索树,二叉搜索树满足左子树的节点小于根节点,右子树的节点大于根节点。根据后序遍历的规律可知,最后一个节点是根节点。比最后一个节点小的属于左子树,剩下的属于右子树然后我们可以使用同样的方法判断这两个子树,就是使用递归的思想...原创 2019-04-10 19:24:03 · 73 阅读 · 0 评论 -
剑指笔记——24.反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思路:这个题和leetcode中的206题一样。主要需要有三个指针,分别指向当前遍历到的节点,它的前一个节点以及后一个节点。要注意几个细节的地方:(1)注意链表头指针为空或者只有一个节点的情况(2)注意反转后的链表不能出现断裂(3)反转后的头结点是原始链表的尾节点代码:public ListNod...原创 2019-04-06 17:17:35 · 91 阅读 · 0 评论 -
剑指笔记——链表中倒数第K个节点
题目:输入一个链表,输出该链表中倒数第k个结点思路:这个题和leetcode中的19题很相似,只不过19题是要多了要删除这个节点的操作。基本思路是使用快慢两个指针。当需要找倒数第k个字符的时候,快指针先走k-1步,慢指针再开始走,知道快指针到了链表的结尾,此时慢指针正好到达要找的位置。代码:代码如下:public ListNode FindKthToTail(ListNode head...原创 2019-04-06 15:55:18 · 69 阅读 · 0 评论 -
剑指笔记—19正则表达式匹配
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配思路:网上找的大神的代码,原文链接为:https://blog.csdn.net/hll174/...原创 2019-04-01 09:21:33 · 119 阅读 · 0 评论 -
剑指笔记——16数值的n次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数,不需要考虑大数问题思路:刚开始想的是最简单的那种思路,就是一个接着一个的乘,但是没有考虑到exponent是负数和0的情况。后来剑指中提供了一种新的思路。我们可以用以下公式求解a的n次方:这样乘法的次数减少了,代码如下。在以下的代码里,要注意几点:(1)...原创 2019-03-27 09:24:22 · 423 阅读 · 0 评论 -
剑指笔记——21 调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分思路:(1)当不需要保证奇数和奇数,偶数和偶数之间的相对位置保持不变的时候,可以使用两个指针,第一个指针指向数组的第一个位置,它只向后移动;第二个指针指向数组的最后一个位置,只向前移动。如果第一个指针指向的是偶数,第二个指针指向的是奇数就交换这两个数字。代码一就是这...原创 2019-04-04 09:54:56 · 83 阅读 · 0 评论 -
剑指笔记——15二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:把一个整数减去1然后再和原整数做与运算,这样一来就会将原整数最右边的1变为0,循环进行知道整数变为0.不需要把原来的整数先转换为二进制数再看1的个数。代码:public int NumberOf1(int n) { int count = 0; while (n != 0...原创 2019-03-26 09:31:59 · 71 阅读 · 0 评论 -
leetcode笔记——179最大数
题目:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。思路:网上找了个大神的代码,原文链接如下:https://blog.csdn.net/niko_ke/article/det...原创 2019-03-19 09:38:15 · 132 阅读 · 0 评论 -
剑指笔记——14剪绳子
题目:思路:动态规划与贪婪算法(1)动态规划:求解问题的最优解;该问题可以分解成若干个子问题,整体的最优解依赖于各个子问题的最优解; 小问题之间还有相互重叠的更小的子问题;从上往下分析问题,从下往上求解问题(2)贪婪算法;当n大于等于5时,我们尽可能多的剪长度为3的绳子;当剩下的绳子长度为4时,把绳子剪成两段长度为2的绳子。...原创 2019-03-25 10:04:29 · 99 阅读 · 0 评论 -
剑指笔记——36.二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向思路:在转换的时候设置节点的左子树指向链表的前一个指针,右子树指向链表的后一个指针。我们将整个二叉树分为三个部分,根节点,左子树和右子树。将根节点和左子树中最大的元素链接,并且与右子树中最小的元素链接。然后才用递归的方式分别处理左子树和右子树。整个思路好复杂。。。。代码:...原创 2019-04-11 11:15:26 · 75 阅读 · 0 评论 -
剑指笔记——27 二叉树的镜像
题目:请完成一个函数,输入一棵二叉树,该函数输出它的镜像。思路:可以使用递归和非递归(循环)的形式写代码。递归代码,原文链接:https://blog.csdn.net/hh_zheng/article/details/78742895递归代码的主要思想是先前序遍历这棵树的每一个节点,如果遍历到的节点有子节点,就交换它的两个节点。当交换完所有非叶子结点的左右节点之后,就得到了树的镜像。...原创 2019-04-08 09:05:46 · 80 阅读 · 0 评论 -
剑指笔记——51.数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P思路:以下是剑指中的思路。最容易想到是就是顺序扫描整个数组,每扫描到一个数字,逐个比较这个数字和它后面数字的大小。这种思路的时间复杂度是.剑指提供了一种比较快的思路,本质上是归并排序。我们先把数组分隔为子数组,统计出子数组内部的逆序对的数目,然后再统计出两个相邻子...原创 2019-04-27 10:04:49 · 133 阅读 · 0 评论