剑指offer编程题
second24
这个作者很懒,什么都没留下…
展开
-
1.二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。代码由于该二维数组的行是从左到右递增,列是从下到上递减,因此为了找到某整数,可以先从左下的位置开始找,如果数组中的值大于target,那么列向右移动,如果值小于target,则行向上移动,如果值等于target,表示已找到,返回原创 2018-02-13 10:50:17 · 176 阅读 · 0 评论 -
剑指offer--顺时针打印矩阵
描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.代码import java.util.ArrayList;public class Solution { publ...原创 2018-03-09 11:31:47 · 144 阅读 · 0 评论 -
剑指offer--包含min函数的栈
描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。代码定义两个栈s1,s2。s1是自然栈,也就是正常的压栈和出栈,而s2是保存当前最小值的栈,当有一个元素压栈时,首先比较s2的栈顶元素和该元素的大小,如果该元素小于s2的栈顶元素,则向s2压栈(更新一下最小值)。当弹栈的时候,也要比较s1和s2的栈顶元素,如果相等,需要将s1和s2的栈顶元素都弹出。impor...原创 2018-03-09 11:51:13 · 165 阅读 · 0 评论 -
剑指offer--栈的压入、弹出序列
描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)代码import java.util.ArrayList;import java.u...原创 2018-03-09 19:43:13 · 127 阅读 · 0 评论 -
剑指offer--平衡二叉树
描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。代码根据平衡二叉树的定义,我们可以根据求二叉树深度的算法,后序遍历求出左右子树的深度差,并做出判断public class Solution { private boolean isBalanced=true; public boolean IsBalanced_Solution(TreeNode root) { ...原创 2018-03-16 20:11:04 · 127 阅读 · 0 评论 -
剑指offer--二叉搜索树的后序遍历序列
描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。代码根据后序遍历的特点,可以确定数组的最后一个元素是头结点,随后,根据二叉搜索树,左子树的节点小于头结点,右子树的节点大于头结点,可以遍历数组,确定左右子树的头,这个过程,一旦有某个元素不符合二叉搜索树的特点,那么直接返回false。publ...原创 2018-03-10 22:41:28 · 120 阅读 · 0 评论 -
剑指offer--复杂链表的复制
描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)代码/*public class RandomListNode { int label; RandomListNode next = null; ...原创 2018-03-11 12:20:41 · 106 阅读 · 0 评论 -
剑指offer--和为S的连续正数序列
描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!代码设置两个指针small和big,表示...原创 2018-03-17 16:10:08 · 139 阅读 · 0 评论 -
剑指offer--二叉搜索树与双向链表
描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。代码经过二叉排序树的中序遍历。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode...原创 2018-03-11 16:19:02 · 139 阅读 · 0 评论 -
剑指offer--两个链表的第一个公共结点
描述输入两个链表,找出它们的第一个公共结点。代码思路:分别计算两个链表的长度,然后可以区分哪个链表更长,并且求出俩链表的长度差delta。然后先遍历长链表,让长链表先走delta步,接下来,两个链表同时遍历,直到两个引用指向同一个对象,返回该节点。/*public class ListNode { int val; ListNode next = null; ...原创 2018-03-15 17:47:26 · 122 阅读 · 0 评论 -
剑指offer--数组中的逆序对
描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 ...原创 2018-03-15 14:59:53 · 98 阅读 · 0 评论 -
2.替换空格
描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。代码public class Solution { public String replaceSpace(StringBuffer str) { if(str==null||str.length()...原创 2018-02-13 11:17:24 · 144 阅读 · 0 评论 -
重建二叉树
描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码其中(start-inS)表示根据前序序列的根节点,获取中序序列中该根节点的下标start,之后与inS(中序序列的根节点的下标)作差,得到...原创 2018-02-13 16:23:38 · 123 阅读 · 0 评论 -
用两个栈实现队列
描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。代码import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); publi原创 2018-02-14 21:09:54 · 131 阅读 · 0 评论 -
剑指offer--链表中倒数第k个结点
描述输入一个链表,输出该链表中倒数第k个结点。代码本题可以设置slow和fast两个指针,首先分别指向head。然后slow不动,让fast指针向右移动k-1次。随后同时移动fast和slow,直到fast指向了最后一个节点,此时返回slow。/*public class ListNode { int val; ListNode next = null; ...原创 2018-03-07 22:15:47 · 118 阅读 · 0 评论 -
剑指offer--反转链表
描述输入一个链表,反转链表后,输出链表的所有元素。代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNod...原创 2018-03-08 10:38:46 · 119 阅读 · 0 评论 -
跳台阶
描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。代码当有1级台阶的时候,由题意可知,只有一种方法。2级台阶的时候,一种是跳两次,每次上一级,另一种是跳一次,上两级。3级台阶的时候,跳法一共应该有f(1)+f(2)种。依次类推,n级台阶就有f(n-1)+f(n-2)种。public class Solution { public int JumpF原创 2018-02-18 21:58:30 · 112 阅读 · 0 评论 -
变态跳台阶
变态跳台阶描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。代码public class Solution { public int JumpFloorII(int target) { if(target==1){ return 1; } if(target原创 2018-02-18 22:21:54 · 140 阅读 · 0 评论 -
剑指offer--二叉树的镜像
描述操作给定的二叉树,将其变换为源二叉树的镜像。代码使用递归的话,就是首先交换根节点的左右孩子节点的指针,随后再分别交换左右节点下的孩子节点。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(in...原创 2018-03-08 20:10:43 · 104 阅读 · 0 评论 -
剑指offer--整数中1出现的次数(从1到n整数中1出现的次数)
描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。代码这道题在不用暴力的情况下,通过观察数字的规律,可以总结三种情况。设N = abcde ,其中abcde分别为十进原创 2018-03-13 16:25:24 · 141 阅读 · 0 评论