
牛客
花花脸的猫
北京邮电大学 硕士毕业程序媛一枚!
展开
-
每日一道剑指offer-替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:1 根据剑指offer,使用两个指针p1,p2,在原来的字符串上从后面开始复制和替换,p1指向原始字符串的末尾,p2指向替换后字符串的末尾,然后向前移动指针,当p1为0或p1=p2时替换完毕。代码:public cl...原创 2019-02-27 15:24:18 · 137 阅读 · 0 评论 -
每天一道剑指offer-翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路首先把字符串按“ ...原创 2019-03-19 15:43:00 · 107 阅读 · 0 评论 -
每天一道剑指offer-栈的压入,弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路我们可以根据给定的测试用例来解释。压入顺序为1,2,3,4,5,弹出顺序4,5,...原创 2019-03-07 18:36:36 · 98 阅读 · 0 评论 -
每天一道剑指offer-约瑟夫环求解圆圈中剩余的数
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一...转载 2019-03-19 21:05:42 · 138 阅读 · 0 评论 -
每天一道剑指offer-链表中环的入口节点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路首先判断链表中是否有环,设置两个指针,一个一次走一步,另一个一次走两步,若链表中存在环,则两个指针一定会相遇,否则输出null有环,找出环的入口节点,当两节点第一次相遇后,让其中一个指针指向头结点,每次走一步,再次相遇时的节点就是入口节点。推导可自行百度。代码public ListNode Entry...原创 2019-03-20 21:41:33 · 171 阅读 · 0 评论 -
每天一道剑指offer-删除链表中的 重复结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路创建一个头指针,用于返回结果,然后在创建两个链表,一个是指向当前结点的值,一个是删除链表重复元素的值,指向确定不重复的结点。注意特殊情况,比如链表中结点...原创 2019-03-21 20:15:06 · 125 阅读 · 0 评论 -
每天一道剑指offer-对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路复制一个相同的二叉树,比较左子节点和右子节点的值,使用递归完成代码boolean isSymmetrical(TreeNode pRoot){ if(pRoot == null) return true; ...原创 2019-03-22 09:58:17 · 130 阅读 · 0 评论 -
每天一道剑指offer-数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路数组有这么一个特点,对于已经排好序的数组,数组中间的数为出现次数超过数组长度一半的值。代码 public int MoreThanHalfNum_Solution...原创 2019-03-13 19:51:55 · 100 阅读 · 0 评论 -
每天一道剑指offer-连续子数组的最大和
题目描述在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和思路我们根据给出的数组{6,-3,-2,7,-15,1,2,2}一步步计算,...原创 2019-03-13 20:53:34 · 102 阅读 · 0 评论 -
java实现快速排序
快排思路:快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot),一般先取第一个元素作为基准; 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作; 递...原创 2019-03-23 21:57:02 · 139 阅读 · 0 评论 -
每天一道剑指offer-二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:将n与n-1想与会把n的最右边的1去掉,比如1100&1011 = 1000再让count++即可计算出有多少个1public class Solution { public int NumberOf1(int n) { int count = 0; ...原创 2019-04-04 21:32:47 · 110 阅读 · 0 评论 -
每天一道剑指offer-二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:由于二叉搜索树的特点可以知道,他的中序遍历就是他的排序,重点是怎么把各个结点的值连起来,形成双向链表。我们使用非递归的中序遍历来试一下。代码:public class Solution { TreeNode Head = null; ...原创 2019-03-28 20:13:31 · 163 阅读 · 0 评论 -
每天一道剑指offer-二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:递归先序遍历树, 把结点加入路径。 若该结点是叶子结点则比较当前路径和是否等于期待和。 弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结点...原创 2019-03-28 21:12:04 · 161 阅读 · 0 评论 -
二叉树常见算法总结(java)
该帖主要对二叉树的常见算法题进行总结,也是方便查看,具体的题目要求和思路可以点开链接查看,欢迎大家指点。1 二叉树的前序遍历(1)访问根节点;(2)递归遍历左子树;(3)递归遍历右子树;递归前序遍历 public void preTraversal(Node node){ if (node != null) { System.out.prin...原创 2019-04-23 10:44:43 · 934 阅读 · 0 评论 -
链表常见算法题总结(Java)
该帖主要对链表的常见算法题进行总结,也是方便查看,具体的题目要求和思路可以点开链接查看,欢迎大家指点。1 反转链表输入一个链表,反转链表后,输出新链表的表头。 public ListNode ReverseList(ListNode head) { ListNode reverse = null; ListNode curr =...原创 2019-04-23 17:13:14 · 1160 阅读 · 0 评论 -
每天一道剑指offer-丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们从1开始乘以...原创 2019-03-14 21:18:23 · 102 阅读 · 0 评论 -
每天一道剑指offer-二叉搜索数的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路二叉搜索树:如果二叉树不为空,则左子节点的值小于根节点的值,右子节点的值大于根节点的值。后序遍历的结果的最后一个元素为二叉树的根节点,则小于根节点的为左子节点,大于根节点的为右子节点,然后递归判断各个节点。代码public ...原创 2019-03-10 16:36:35 · 139 阅读 · 0 评论 -
每天一道剑指offer-从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路从上往下的遍历二叉树,不像前序,中序,后序一样,我们需要一个容器存储子节点,从左往右顺序添加,然后从左往右输出,遍历,这种先进先出规则的容器应该是队列,我们可以定义一个数组来模拟队列,存储当前结点下的子节点。代码public ArrayList<Integer> PrintFromTopToBottom(Tre...原创 2019-03-10 12:31:24 · 88 阅读 · 0 评论 -
每日一道剑指offer-从尾到头打印链表
题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。思路:解决方案一:首先遍历链表的节点后打印,典型的“后进先出”,可以使用栈来实现这种顺序。解决方案二:栈的本质就是递归,直接使用递归的方式,打印一个节点的时候先打印它后面的节点,再打印该节点自身,实现反向打印。代码解决方案一public ArrayList<Integer> printListF...翻译 2019-02-27 17:08:34 · 139 阅读 · 0 评论 -
每天一道剑指offer-重建二叉树
题目描述:、输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:根据二叉树前序遍历和终须遍历可以唯一确定一颗二叉树前序遍历顺序:先遍历根节点,在前序遍历左子节点,最后前序遍历右子节点中序遍历顺序:先遍...翻译 2019-02-28 11:26:03 · 205 阅读 · 0 评论 -
每日一道剑指offer-两个栈来实现一个队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:压入元素直接压入stack1删除元素先查看stack2是否为空,非空则弹出;空则将stack1中元素取出,置于stack2中代码:public class Solution { Stack<Integer> stack1 = new Stack<Integer&...翻译 2019-02-28 12:00:43 · 130 阅读 · 0 评论 -
每天一道剑指offer-旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:使用二分查找可完成查找。设置两个指针,一个指向数组的最前端(p1),一个指向数组的末尾(p2),找到...翻译 2019-03-01 11:10:28 · 121 阅读 · 0 评论 -
每天一道剑指offer-合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路使用两个指针,分别指向两个单调递增的链表,比较链表的值,把较小的合并后新链表,然后递归合并剩余的。代码public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ ...翻译 2019-03-05 10:26:42 · 139 阅读 · 0 评论 -
二叉树的前中后序遍历的三种实现(java)以及一些小习题
递归前序遍历前序遍历过程:(1)访问根节点;(2)递归遍历左子树;(3)递归遍历右子树;先序遍历结果:A BDFE CGHI public void preTraversal(Node node){ if (node != null) { System.out.print(node.getValue()+" "); preTr...转载 2019-02-26 11:58:28 · 521 阅读 · 0 评论 -
每天一道剑指offer-数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路首先要把所有的情况都考虑在内,比如基数和指数为0的情况,指数为负数的情况。然后说一下一种比较优的思路,比如一个数的32次方,它与这个数16次方的平方相等,依次类推,求一个数的32次方只需做5次乘方,先求平方,平方的基础上求四次方,在四次方基础上求八次方,在八次方基础上求...翻译 2019-03-03 16:44:15 · 88 阅读 · 0 评论 -
每天一道剑指offer-调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路使用两个数组,一个存储数组中的奇数,一个存储数组的偶数,然后在合并两个数组代码public void reOrderArray(int [] array) { ArrayList<Inte...翻译 2019-03-03 16:47:55 · 81 阅读 · 0 评论 -
每日一道剑指offer-二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5思路如果二叉树的当前结点有子节点,交换,遍历剩下的子节点代码public void Mirror(TreeNode root) { if(root!=null...原创 2019-03-06 15:38:07 · 134 阅读 · 0 评论 -
每天一道剑指offer-把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路Collections.sort()compareTo()代码public String PrintMinNumber(int [] numbers) { String res = "...原创 2019-03-13 22:33:44 · 88 阅读 · 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.思路把矩阵现象为若干个圈组成,用一个循环来输出矩阵。首先分析循环结束的条件,打印第一圈左上角坐标为(0,0),第二...转载 2019-03-06 20:54:50 · 101 阅读 · 0 评论 -
每天一道剑指offer-链表中第k个节点
题目描述:输入一个链表,输出该链表中倒数第k个结点。思路使用双指针,让第一个指针领先第二个指针k-1,当第一个指针到达链表尾部时,第二个指针位置即n-(k-1)=n-k+1,也就是倒数第k个结点。此题主要是让我们考虑程序鲁棒性,所以要把输入情况都要考虑在内。代码public ListNode FindKthToTail(ListNode head,int k) { Li...翻译 2019-03-04 15:44:53 · 207 阅读 · 0 评论 -
每日一道剑指offer-反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。思路参考:https://blog.youkuaiyun.com/u013132035/article/details/80589657代码 public ListNode ReverseList(ListNode head) { ListNode reverse = null; ListNod...转载 2019-03-04 15:57:13 · 147 阅读 · 0 评论 -
每天一道剑指offer-包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路定义一个辅助的成员变量,当有新元素进栈时,比较成员变量和新进栈元素的大小,如果新进栈元素小,则更新成员变量中值,但当栈中元素出栈时,无法得到次最小的元素,所以仅定义一个成员变量的值存放最小的值时不够的,还需要借助一个辅助栈,把每次新入栈元素的最小值都给保存下来。代码publ...原创 2019-03-07 10:43:47 · 94 阅读 · 0 评论 -
Java滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...转载 2019-06-22 13:53:59 · 449 阅读 · 0 评论