剑指Offer
搬砖丶小码农
走向地中海
展开
-
剑指Offer-用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题解:队列是先进先出的,栈是先进后出的,利用两个栈,首先在栈1中存储元素,弹出时假设栈2是空的,则将栈1得元素全部放入栈2中,然后弹出栈2的元素,假设栈2不为空,则直接弹出。import java.util.Stack;public class Solution { Stack&l...原创 2018-08-14 10:51:29 · 106 阅读 · 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.题解:题目类型蛇形填数,在一个矩阵中瞬时间遍历,只需要控制好边界以及数是不是已经遍历过,采用一个新的二维数组的...原创 2018-12-07 08:32:22 · 137 阅读 · 0 评论 -
剑指Offer-数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。题解:遍历数组中的所有元素,利用HashMap存储数组的元素,值为该元素出现的次数,然后遍历HashMap获取值为1的两个数字。import java.util.HashMap;import java.util.Iterator;public class Solution {...原创 2018-12-04 23:26:24 · 134 阅读 · 0 评论 -
剑指Offer-最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。题解:1.暴力求解,数据量大当然会超时。将数组排序,然后遍历找到最小的K个数。(PS:K大于数组的长度时,输出应该为空的数组。)import java.util.ArrayList;import java.util.Arrays;public cl...原创 2018-12-05 13:45:59 · 227 阅读 · 0 评论 -
剑指Offer-包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 题解:得到栈中所含最小元素,时间复杂都为O(1),那么只有可能是栈顶的元素是最小的。但是设计的栈还要符合先进后出的特性。所以利用两个栈,一个栈存放元素,另外一个栈存放当前栈中最小的元素。比如存放数据为3,4,2,3,则两个栈的元素由下图表所示。存放的元素 数据栈...原创 2018-12-04 22:14:43 · 132 阅读 · 0 评论 -
剑指Offer--合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题解: 类似于归并排序,归并排序:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 题目就是将两个有序的链表合并为一个有序的链表,存在两种情况。 1.两个链表存在值,比较两个链表的...原创 2018-12-04 21:28:47 · 256 阅读 · 0 评论 -
剑指Offer--从上到下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 题解遍历规则为从上到下,同层节点从左到右。采用队列的特性,先将二叉树的根节点放入队列中,然后根节点出队列,假设根节点有左孩子,则将左孩子加入队列中,根节点有右孩子,则将右孩子加入队列中,然后将根节点的值存入ArrayList,依次类推,即为答案。 import java.util.ArrayList;imp...原创 2018-12-04 13:08:35 · 143 阅读 · 0 评论 -
剑指Offer-反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。题解:将一个链表遍历后,把每一个节点放入ArrayList中,然后反向遍历ArrayList,形成一个新的链表。注意小心出现链表闭环的情况。import java.util.ArrayList;import java.util.List;public class Solution { public ListNode Re...原创 2018-08-16 13:02:30 · 120 阅读 · 0 评论 -
剑指Offer-链表中倒数第k个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。题解:先统计链表的总节点数,然后求出倒数第k个节点是顺序遍历的第几个节点。可以采用线性表存储每一个位置的节点,然后查找则比较快些,不用再遍历链表。import java.util.ArrayList;import java.util.List;public class Solution { public ListNode Fin...原创 2018-08-16 12:59:11 · 177 阅读 · 0 评论 -
剑指Offer-二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题解:java的Integer类有个静态的方法,能将整数转换成二进制的字符串,然后遍历这个字符串统计1的个数。public class Solution { public int NumberOf1(int n) { //利用Integer的方法将整数n转换成二进制的字符串 String binar...原创 2018-08-15 23:42:46 · 106 阅读 · 0 评论 -
剑指Offer-调整数组顺序使奇数位于偶数的前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题解:将整数数组中的奇数放在一个数组,将偶数放在另一个数组中,然后合并这两个数组的数据。public class Solution { public void reOrderArray(int[] ar...原创 2018-08-15 23:36:09 · 95 阅读 · 0 评论 -
剑指Offer-从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。一开始的想法是,遍历链表,在利用ArrayList的add方法,插入到ArrayList的下标0的位置,然后ArrayList中的元素往后移动一位,题目太水竟然过了。public class Solution { public ArrayList<Integer> printListFromTailToH...原创 2018-08-13 14:54:02 · 99 阅读 · 0 评论 -
剑指Offer-二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。从题目意思就是每一行,每一列的数组都是有序的,按照数组下标的增长,数也在增大,只要分成每一行每一行的一维数组,或者分成每一列每一列的一维数组进行二分查找即可。只需判断好数组下标是否会越界,题目就过了。...原创 2018-08-13 10:42:19 · 327 阅读 · 0 评论 -
剑指Offer-替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目比较容易,暴力for循环求解,public class Solution { public String replaceSpace(StringBuffer str) { String str1 = "";...原创 2018-08-12 22:45:29 · 173 阅读 · 0 评论 -
剑指Offer-跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题解:青蛙每一步都可以选择跳1步,或者跳2步,而且先后顺序不同就算不同的结果。典型的递归问题,将n的台阶,划分成了更小的台阶,n-1,n-2,当最后跳的台阶是1或者2时,递归结束。public class Solution { public int J...原创 2018-08-14 11:06:56 · 127 阅读 · 0 评论 -
剑指Offer-链表环的入口
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 解法:先采用快慢指针,一个走两步,一个走一步,假设走两步的指针先到达尾部,那么就是没有环,假设有环,两个指针必定会相遇,相遇之后,走两步的指针从头节点重新开始,两个指针都走一步,当两个指针再次相遇时,即为环的入口。public class Solution { public ListNode...原创 2018-12-07 09:11:58 · 152 阅读 · 0 评论