随笔分类 -  刷题-剑指Offer

摘要:题一:【矩阵中的路径】 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d 阅读全文
posted @ 2019-12-23 13:27 Qmillet 阅读(313) 评论(0) 推荐(0)
摘要:抽象建模能力 题一:【扑克牌顺子】 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh M 阅读全文
posted @ 2019-12-21 14:06 Qmillet 阅读(237) 评论(0) 推荐(0)
摘要:题一:【数字在排序数组中出现的次数】 统计一个数字在排序数组中出现的次数。 法一:暴力解决O(N) 1 public class Solution { 2 public int GetNumberOfK(int [] array , int k) { 3 int count = 0; 4 for(i 阅读全文
posted @ 2019-12-21 13:15 Qmillet 阅读(310) 评论(0) 推荐(0)
摘要:题一:【丑数】 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 分析:自己写了一个,算法复杂度太大了——写一个判断是否是丑数的函数,然后依次判断 1 public 阅读全文
posted @ 2019-12-19 11:34 Qmillet 阅读(227) 评论(0) 推荐(0)
摘要:题一:【数组中出现次数超过一半的数字】 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 法一:暴力破解——使用Map记录数组中每个数字出 阅读全文
posted @ 2019-12-17 11:26 Qmillet 阅读(171) 评论(0) 推荐(0)
摘要:题一:【复杂链表的复制】 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 分析:复制一个链表,则需要复制链表中的每一个节点和节点之间 阅读全文
posted @ 2019-12-16 09:14 Qmillet 阅读(234) 评论(0) 推荐(0)
摘要:题一:【包含min函数的栈】 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 分析:时间复杂度要求高,可牺牲空间。定义两个栈stack(正常操作)和stackMin(栈顶元素是最小值)。每次push时,直接向stack压入元素,并且和stack 阅读全文
posted @ 2019-12-14 15:25 Qmillet 阅读(274) 评论(0) 推荐(0)
摘要:面试思路 题一:【二叉树的镜像】 操作给定的二叉树,将其变换为源二叉树的镜像。 分析:使用递归=》边界条件:节点为空,交换当前节点的左右节点。 1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeN 阅读全文
posted @ 2019-12-13 16:28 Qmillet 阅读(206) 评论(0) 推荐(0)
摘要:题一:【链表中倒数第k个节点】 输入一个链表,输出该链表中倒数第k个结点。 分析:快慢指针,快指针比慢指针先走k-1步,当快指针走到末尾时,慢指针之乡的位置就是倒数第k个节点; 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = n 阅读全文
posted @ 2019-12-12 12:53 Qmillet 阅读(185) 评论(0) 推荐(0)
摘要:题一:【数值的整数次方】 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。 分析:大力出奇迹:注意exponent大于0小于0的情况 1 import java.lang.Math; 2 publ 阅读全文
posted @ 2019-12-12 10:34 Qmillet 阅读(219) 评论(0) 推荐(0)
摘要:题一:【二进制中1的个数】 输入一个整数n,输出该数二进制表示中1的个数。其中负数用补码表示。 分析:常规解法:n的二进制每次和flag做与运算 =》查看当前位是否为1,如果是count++,然后将flag左移一位。 1 public class Solution { 2 public int Nu 阅读全文
posted @ 2019-12-11 11:44 Qmillet 阅读(169) 评论(0) 推荐(0)
摘要:动态规划(递归)解题步骤: 1.将原问题拆分成子问题。 2.确认状态。 3.确认边界状态(初始条件)。 4.状态转移方程。 题一:【斐波那契数列】 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 分析:斐波那契数列:{0 1 1 2 阅读全文
posted @ 2019-12-11 10:47 Qmillet 阅读(126) 评论(0) 推荐(0)
摘要:题一:【旋转数组的最小数字】 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回 阅读全文
posted @ 2019-12-11 09:21 Qmillet 阅读(165) 评论(0) 推荐(0)
摘要:题一:【用两个栈实现队列】 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 分析:栈-先进后出 队列-先进先出 知识点:Stack API 法一:暴力-一个栈存储push的数据,一个栈pop数据。每次push前将stack2中数据添加到stack1中,每次pop 阅读全文
posted @ 2019-12-10 14:39 Qmillet 阅读(266) 评论(0) 推荐(0)
摘要:题一:【重建二叉树】输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 分析:根据示例可以知道,前序遍历序列第1个 阅读全文
posted @ 2019-12-09 15:02 Qmillet 阅读(262) 评论(0) 推荐(0)
摘要:附1:Stack API 附2:ArrayList API 题一:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 法一:递归 1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 阅读全文
posted @ 2019-12-06 14:04 Qmillet 阅读(337) 评论(0) 推荐(0)
摘要:字符串(String、String Buffer、StringBuilder)常用方法 原文链接:https://www.cnblogs.com/116970u/p/11495096.html 1.String 1 1.获取: 2 1)获取字符串str长度 3 int i = str.length( 阅读全文
posted @ 2019-11-28 18:22 Qmillet 阅读(371) 评论(0) 推荐(0)
摘要:题一:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析:二维数组左小右大,上下下大,那么左上角的是最小值,右下角是最大值。如果两次循环遍历查找,查找顺 阅读全文
posted @ 2019-11-27 21:16 Qmillet 阅读(183) 评论(0) 推荐(0)