Home

剑指Offer 面试题08:旋转数组的最小数字

旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 解题思路 先处理两种特殊情况。搜索范围头元素小于搜索范围尾元素,直接得出结果。搜索范围头元素、中间元素、尾元素相等,退化为顺序查找。然后根据搜索范围的头元素与中间元素的大小关系,缩小搜索范围。缩小到搜索范围只剩1到2个元素时得出结果。缩小搜索范围的核心思想是二分法。 代码 import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int ...

Read more

剑指Offer 面试题07:用两个栈实现队列

用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路 根据栈的后进先出特性,把若干元素全部入栈再出栈,出栈的顺序与入栈的顺序相反。假如把这个过程再做一次,则可以再一次把顺序反过来,与入栈顺序相同,实现队列的先进先出。因此,把其中一个栈作为输入栈,另外一个栈作为输出栈。队列的push都只需要把元素压入输入栈,队列的pop则需要看当前输出栈有没有元素,若有元素则直接弹出栈顶元素。若没有元素则把输入栈的元素依次弹出再压入输出栈,然后弹出输出栈顶元素。 代码 import java.util.Stack; public class Solution { Stack<Integer> stac...

Read more

剑指Offer 面试题06:重建二叉树

重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题思路 前序遍历顺序为根节点 -> 左子树 -> 右子树,中序遍历顺序为左子树 -> 根节点 -> 右子树。根据前序遍历以及中序遍历序列,重建树的根节点,并得到树的左右子树的前序与中序遍历序列。最后递归调用,重建左子树以及右子树。 代码 /** * Definition for binary tree * public class TreeNode { * int val; *...

Read more

剑指Offer 面试题05:从尾到头打印链表

从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList 解题思路 先遍历一次链表,得到链表长度。初始化一个该长度的数组,再一次遍历链表,将链表元素值从数组尾部开始加入。最后将数组转为ArrayList 这里的遍历链表顺序与最终需要的结果顺序刚好相反。如果可以直接使用栈,或自己实现一个栈,则可以先把链表元素按顺序入栈,全部元素入栈以后再逐一出栈。 代码 /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * ...

Read more

剑指Offer 面试题04:替换空格

替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解题思路 先遍历一次字符串,得到替换后的字符串总长度。以替换后的字符串总长度新建一个字符数组,再次遍历字符串,把每个字符复制到新字符数组中,遇到空格则替换为%20 原书题目使用C语言,传入参数是足够大的字符数组,在不允许创建新的字符数组的情况下,假如从左到右遍历字符数组并替换,则会导致后面的字符多次移位。更好的解法是先遍历一次字符串,计算得到替换后的字符串总长度。注意C语言的字符串是以特殊字符\0作为终结符的。然后使用两个指针,都指向原来传入的字符数组,但位置不同。一个指向替换后的字符串结尾位置,一...

Read more

剑指Offer 面试题03:二维数组中的查找

二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 从二维数组中的右上角或左下角开始作比较,每次比较要么查找命中,要么至少可以排除一行或者一列 代码 public class Solution { public boolean Find(int target, int [][] array) { if (array != null) { int iMaxIndex = array.length - 1; int jMaxInd...

Read more

解决启动OracleOraDb11g home1TNSListener服务启动后又停止的问题

解决方法 与系统host文件配置有关,恢复默认配置可能可以解决问题 这可能是由于网络环境的转换造成的,配置在listener.ora存在无法访问的host 打开listener.ora配置环境(参考目录路径D:\oracle\product\11.2.0\client_1\network\admin) 配置listener保留计算机名 LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = TCP)(HOST = ZGC-20140117CHV)(PORT = 1521))     )   )

Read more

解决加载页面EasyUI控件发出两次数据请求的问题

问题原因 页面通过class属性定义了控件,且赋值了url属性,会导致第一次发送数据请求。js中为此控件定义新的属性或事件,会导致控件第二次渲染,发送第二次请求 解决方法 url属性不要在页面赋值,而在js赋值。或不要在js定义新属性,全部移到页面定义。或不要在页面定义class属性,全部在js进行控件初始化。尽量不要同时在页面定义class,又在js初始化控件,不要造成二次控件渲染

Read more