剑指Offer 面试题08:旋转数组的最小数字
旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路
先处理两种特殊情况。搜索范围头元素小于搜索范围尾元素,直接得出结果。搜索范围头元素、中间元素、尾元素相等,退化为顺序查找。然后根据搜索范围的头元素与中间元素的大小关系,缩小搜索范围。缩小到搜索范围只剩1到2个元素时得出结果。缩小搜索范围的核心思想是二分法。
代码
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int ...
剑指Offer 面试题07:用两个栈实现队列
用两个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
根据栈的后进先出特性,把若干元素全部入栈再出栈,出栈的顺序与入栈的顺序相反。假如把这个过程再做一次,则可以再一次把顺序反过来,与入栈顺序相同,实现队列的先进先出。因此,把其中一个栈作为输入栈,另外一个栈作为输出栈。队列的push都只需要把元素压入输入栈,队列的pop则需要看当前输出栈有没有元素,若有元素则直接弹出栈顶元素。若没有元素则把输入栈的元素依次弹出再压入输出栈,然后弹出输出栈顶元素。
代码
import java.util.Stack;
public class Solution {
Stack<Integer> stac...
剑指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;
*...
剑指Offer 面试题05:从尾到头打印链表
从尾到头打印链表
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList
解题思路
先遍历一次链表,得到链表长度。初始化一个该长度的数组,再一次遍历链表,将链表元素值从数组尾部开始加入。最后将数组转为ArrayList
这里的遍历链表顺序与最终需要的结果顺序刚好相反。如果可以直接使用栈,或自己实现一个栈,则可以先把链表元素按顺序入栈,全部元素入栈以后再逐一出栈。
代码
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* ...
剑指Offer 面试题04:替换空格
替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
先遍历一次字符串,得到替换后的字符串总长度。以替换后的字符串总长度新建一个字符数组,再次遍历字符串,把每个字符复制到新字符数组中,遇到空格则替换为%20
原书题目使用C语言,传入参数是足够大的字符数组,在不允许创建新的字符数组的情况下,假如从左到右遍历字符数组并替换,则会导致后面的字符多次移位。更好的解法是先遍历一次字符串,计算得到替换后的字符串总长度。注意C语言的字符串是以特殊字符\0作为终结符的。然后使用两个指针,都指向原来传入的字符数组,但位置不同。一个指向替换后的字符串结尾位置,一...
剑指Offer 面试题03:二维数组中的查找
二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
从二维数组中的右上角或左下角开始作比较,每次比较要么查找命中,要么至少可以排除一行或者一列
代码
public class Solution {
public boolean Find(int target, int [][] array) {
if (array != null) {
int iMaxIndex = array.length - 1;
int jMaxInd...
解决谷歌浏览器,下载文件报错:我们收到了多个截然不同的“Content-Disposition”标头。我们不允许此行为,以防遭到 HTTP 响应拆分攻击的问题
问题原因
可能是HTTP头Content-Disposition中的filename带有未转义的引号、逗号等字符
解决方法
将filename需要转义的字符转义
IE内核的浏览器不会出现此问题
解决虚拟机Linux无法ping通win10宿主机,反过来却可以的问题
问题原因
win10防火墙默认禁止
解决方法
控制面板 / 系统和安全 / Windows 防火墙
高级设置->入站规则->文件和打印机共享(回显请求 - ICMPv4-In) 专用 公用 启用规则
解决启动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))
)
)
解决加载页面EasyUI控件发出两次数据请求的问题
问题原因
页面通过class属性定义了控件,且赋值了url属性,会导致第一次发送数据请求。js中为此控件定义新的属性或事件,会导致控件第二次渲染,发送第二次请求
解决方法
url属性不要在页面赋值,而在js赋值。或不要在js定义新属性,全部移到页面定义。或不要在页面定义class属性,全部在js进行控件初始化。尽量不要同时在页面定义class,又在js初始化控件,不要造成二次控件渲染
332 post articles, 34 pages.