最短摘要生成
题目
最短摘要生成
给定一个字符串,以及一系列查询词,在这个字符串中找到一个子串,该子串包含全部的查询词,求这个最短子串
解析
两个指针,begin和end
首先使用end往右边移动一直移动到全部包含查询字符集q的位置
然后将begin也向右边移动,直达再移动一次begin-end区间里面的数据将不再包含q
此时记录begin和end以及其最小的间距
然后begin右移一位,end继续右边移动直至全部包含,周而复始
最短摘要生成
给定一个字符串,以及一系列查询词,在这个字符串中找到一个子串,该子串包含全部的查询词,求这个最短子串
两个指针,begin和end
首先使用end往右边移动一直移动到全部包含查询字符集q的位置
然后将begin也向右边移动,直达再移动一次begin-end区间里面的数据将不再包含q
此时记录begin和end以及其最小的间距
然后begin右移一位,end继续右边移动直至全部包含,周而复始
找一个数组中绝对值和最小的三个元素
暴力的方法是O(n^3),肯定还存在其他更加优的方法
注意,两端向中间找的时候如果遇到当前固定的数字需要跳过
对于一个由N个整数组成的数组,需要比较多少次才能把最大和最小的数找出来呢?
普通的遍历是需要O(2n)时间,那有没有其他更好的办法呢?
其实可以使用分而治之的思想,将N分为两段 分别取到每一段中的最大和最小值 ,然后最大与最大比即可 最小与最小比即可,这样就可以避免最小与最大的比较
比如:
1,2,3,4
正常对比的话得到min=1,max=4需要6次
那如果先求的min1=1,max1=2,min2=3,max2=4(需要2次比较)
然后min1<min2 得到min=1,max1<max2可得max=4 (又是需要2次)
所以这种方法只需要4次
这里主要使用递归来实现,也就是考察递归的熟练使用与否
全排列的递归生成规则为:
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
--摘自百度百科
通过这个介绍还不是很理解怎么办?什么是切面呀?
我的理解哈:你现在有一系列普通的执行方法,但是想在方法执行的前后加点东西,比如记录日志,那你不可能去再每个方法上都去加记录日志的语句,那这个时候AOP就来了,将这个记录日志作为切面切入到这些方法中,在平常自然调用这些方法时候同时执行这些切面。
那该怎么切入呢?
队列和栈是编程中非常经典并且使用的两个数据结构:
队列和栈的互操作主要考察对两个数据结构的认识
假设现有队列q1和q2,要通过q1,q2来构建数据的先入后出
栈每次pop的都是最后一次push的值,所以可以在pop的时候将原有值都压入另一个队列,
直到最后一个元素时直接弹出
所以这样的话在push的时候就必须将元素进队到有值的那个队列,大致的逻辑图就是这样:
a~z 包括大小写与 0~9 组成的 N 个数, 用最快的方式把其中重复的元素挑出来。
本题中已经限制了可能出现字符,他们对应的ascii为
所以这里只需要用位图法来存储,并且之用128位即可,就是4个长度的int数组,
在操作过程中,如果数组中已经设置了值,则说明当前遍历的为重复,打印出来即可
否则,将这个值设置到数组中,整体思路与位排序大致一致,复杂度为O(n)
find
命令极为好使,在面试中也常常会被问到,所以在这里再好好学习一下^_^
注:本文使用的环境是CentOS6.5
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
语法:find 起始目录 寻找条件 操作
说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
其实关于Linux
下的命令一般通过—help
就可以大致入门使用,实在不行再用man
来看更为完整版的手册。
下面先长长得列一下: