
刷题笔记
Stefan1001
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer-链表-寻找一个链表中的环入口
题目 一个链表中包含环,请找出该链表的环的入口结点个人思路分析一定要保证思维有序,分析问题后即使最后没有得到最完美的答案,至少方向正确不能跑偏。链表结构 public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = v...原创 2018-05-02 09:51:02 · 169 阅读 · 0 评论 -
剑指offer-栈-栈的压入、弹出序列
题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路模拟栈压入弹出过程:栈空或者栈顶元素不等于弹出序列元素 ⇒ push...原创 2018-06-02 09:57:07 · 162 阅读 · 0 评论 -
leetcode-反转整数
题目思路每次mod去最后一位数字tail之前的反转结果*10 + tail难点是溢出检查,要在溢出发生之前作出判定 codepublic class ReverseInteger { public int reverse(int x) { int src = x; int result = 0; while(...原创 2018-06-23 16:12:43 · 317 阅读 · 0 评论 -
剑指offer-栈-包含min函数的栈
题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路第一想法 类似于找到数组中的最小元素(设置一个min变量暂存当前最小值),设置一个存储变量。但是问题随之出现,如果最小元素出栈,那么之后再调用min( )方法将没有最小值的记录。过渡想法 尝试用数组存储??这样可以保存多个值。但是数组的空间大小不能确定,所以考虑动态数组ArrayList??...原创 2018-06-01 15:45:35 · 230 阅读 · 0 评论 -
剑指offer-树-树的子结构
题目 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析总共应该分成三种情况: 1. AB树根相同,要求AB左右子树严格覆盖 2. AB树根不同,判断B是否存在于A的左子树中 3. B不在A的左子树中,判断B是否在A的右子树中特殊情况:A树为空或B树为空 ⇒ return false;进行子树覆盖判定时 ⇒ root2...原创 2018-06-01 11:07:56 · 270 阅读 · 0 评论 -
剑指offer-数组中的逆序对
题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路初见思路 顺序扫描数组,和后面的每个数字进行比较,如果大于后面的数字count++ 评估:很明显一个O(n^2)的算法,不能符合对时间复杂度的要求。改进思路(...原创 2018-06-14 22:57:35 · 202 阅读 · 0 评论 -
剑指offer-字符串-字符串的排列组合
题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。排列:逐位确定,递归。TreeSet有序(字典序)不重特性import java.util.ArrayL...原创 2018-06-07 21:58:39 · 730 阅读 · 0 评论 -
剑指offer-时间效率-数组出现次数超过一半的数字
题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路传统思路 出现次数超过半数的元素,一定会出现在有序数列的中位数上。所以先对数组排序然后返回中间元素。 评估: sort( )方法排序是O(nlogn),所...原创 2018-06-07 21:32:44 · 175 阅读 · 0 评论 -
剑指offer-大数思维-打印1到最大的n位数
题目 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999.分析传统方式:直接求出最大的n位数,然后循环打印。传统做法的问题:当位数过大的时候,long类型都不能承载(坑一)修改方案:使用字符串模拟加法操作 add操作:个位不断加一,满十进位;其他位只有当有进位时才加一 <===> number[0] ...原创 2018-05-31 15:44:58 · 302 阅读 · 0 评论 -
剑指offer-代码质量-数值的整数次方
题目 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析base:double类型,是否为0exponent ∈ Z exponent > 0exponent == 0 非零底数 return 1;exponent < 0 常规for循环,优化效率可以“翻番乘”,位运算等方式错误处理反馈...原创 2018-05-30 12:54:24 · 263 阅读 · 0 评论 -
剑指offer-链表-复杂链表复制
题目 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路分析原始思路 首先从头到尾遍历链表,遍历的同时进行复制 存在问题: O(n)完成从头到尾的遍历复制,但是连接random时需要先通过遍历找到节点,导...原创 2018-06-05 19:13:49 · 426 阅读 · 0 评论 -
剑指offer-数组-旋转数组的数字
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路分析传统方法 从后向前直接遍历,这样一定可以得到正确结果但是一定不会令面试官满意。改进方...原创 2018-05-29 19:28:01 · 339 阅读 · 0 评论 -
剑指offer-链表-两个链表的第一个公共节点
题目 输入两个链表,找出它们的第一个公共结点。思路分析否定第一反应:第一眼看到题目,觉得是给两个数表,然后找重复元素中的第一个。但是仔细思考一下,对“第一”的判定实在是不准确(最先出现?)书中关键点:若两个单链表有公共节点,则公共节点之后的链表必定是相同的——“合流” 公共点的性质:来自不同链表的指针重合(pHead1 == pHead2;)遍历指针对齐:计算链表长度,...原创 2018-05-06 20:15:52 · 137 阅读 · 0 评论 -
剑指offer-链表-删除链表中的重复节点
题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-&gt;2-&gt;3-&gt;3-&gt;4-&gt;4-&gt;5 处理后为 1-&gt;2-&gt;5思路分析思路一:使用LinkedList保存不重复节点,重构链表使用一前一后两个扫描指针(pwork = pHead; pafter原创 2018-05-06 14:50:15 · 159 阅读 · 0 评论 -
剑指offer-树-二叉树的下一个结点
题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路分析MyCode/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; ...原创 2018-05-17 00:21:00 · 213 阅读 · 1 评论 -
ali内推——继续理解DFS与回溯
题目 如图,某物流派送员p,需要给a、b、c、d4个快递点派送包裹,请问派送员需要选择什么的路线,才能完成最短路程的派送。假设如图派送员的起点坐标(0,0),派送路线只能沿着图中的方格边行驶,每个小格都是正方形,且边长为1,如p到d的距离就是4。随机输入n个派送点坐标,求输出最短派送路线值(从起点开始完成n个点派送并回到起始点的距离)。 输入 4 2,2 2,8 ...原创 2018-07-17 21:51:12 · 5123 阅读 · 1 评论