代皓 Blog

要么庸俗 要么孤独.

数组中的逆序

 

题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%1...

iOS的block

 

block概述 《Objective-c高级编程》中描述block是带有自动变量(局部变量)的匿名函数。 我的理解就是可以直接在一段代码中插入一个函数,而不用显示的去掉用这个函数。 block基本语法 ^返回值 参数列表{}; // 返回值是整数,两个参数 ^int(int i,int j){ return i+j; }; // 无返回值...

查找算法之顺序查找

 

思想 从线性表的一端顺序查找到另一端,匹配成功,返回相应的位置,否则匹配失败。 顺序查找适合存储结构是顺序存储(如数组)或链接存储(单链表)的线性表。 代码 package findMethod; public class linerFind { public static void main(String[] args) { // TODO Auto-generated ...

查找算法之折半查找

 

思想 折半查找要求较高: (1)存储节后是数组 (2)数组有序 主要思想是,取中间的记录作为比较对象,假如相等,就返回中间对象的位置,假如小于中间对象,就在左半部分继续查找,否则在右半部分继续查找。 例子 代码 package findMethod; public class Binserch { public static void main(String[] ar...

顺时针打印矩阵

 

题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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. 如下图所示: 分析 这个题感觉更像是找规律,我的思想是先求出从外到内一共有多少圈,然后去输入每一圈的四条...

栈的压入、弹出序列

 

题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 (注意:这两个序列的长度是相等的) 分析 设定辅助栈,如果当前弹出的数字刚好是栈顶数字,就直接弹出,如果不...

包含min函数的栈

 

题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 分析 栈的特点是先进后出,所以要求min的时间复杂度是1,就必须将最小的元素时刻放在栈顶,那么我们考虑每次压栈的时候,将当前要压栈的元素和栈中所有元素进行比较, 最小的放在栈顶。这样是可以满足min函数的要求,但是这个数据结构就不是栈了,因为不能保证先进后出。 那么我们考虑在栈中设置一个变量保存最小...

树的子结构

 

题目 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 分析 (1)在tree1中寻找tree2的根节点,如果找到了,就接着往下匹配左右节点,如果没有找到,就直接返回false,表示匹配失败; (2)加入tree1的某个节点和tree2的根节点相等,但是左右子树并不相同,并不能说明tree2就不是tree1的子结构,应该继续往下寻找;...

合并两个排序的链表

 

题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 分析一 这个题,如果我们按照一般的思路去思考,不用递归的话,就是从两个链表的开头往后比较,数值小的放到新的链表中,然后又从链表的开头进行比较。 这样知道其中某一个链表的所有元素被遍历完,另一个没有被遍历完的链表的剩余部分一定是有序的,并且比新的链表的中的节点的值大,所以直接接在...

二叉树的镜像

 

题目 操作给定的二叉树,将其变换为源二叉树的镜像。 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 ...