剑指offer笔记
程序员楂楂
知道的越多,不知道的越多
展开
-
计算数字k在0到n中的出现的次数,k可能是0~9的一个值
转载文章:https://blog.csdn.net/doujinlong1/article/details/81366217例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)int countDigitOne(int n, int k) { if (n<10...转载 2018-10-11 15:38:12 · 495 阅读 · 0 评论 -
(java)三种方法求斐波那契数列的第n项
题目:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:解答本题的方法有三:按照定义编程,使用的方法是递归。 方法一递归分解的子问题存在大量的重复计算,于是我们将递归改为自上而下的循环实现。(本题的核心) 采用数学公式实现。分析:使用递归会有许多的重复计算:方法三涉及到的数学公式:代码实现如下:package com.example...原创 2019-08-29 17:34:11 · 6165 阅读 · 1 评论 -
java:用两个队列实现栈
题目:利用两个队列模拟栈,分析图如下:abcd一次进入队列模拟进入栈; 进行出栈操作,表示d要出栈,根据队列的先进先出原则,只有abc依次出队列d才有机会出队列,所以abc从queue01出队列到queue02,d出队列实现出栈操作; 元素ef需要进栈,直接进入到queue01队列即可; 进行出栈操作,表示f需要出栈,此时将e出队列进去到queue02,f出队列达到出栈效果。注:...原创 2019-08-07 14:53:49 · 378 阅读 · 0 评论 -
(java)用两个栈实现队列
题目:用两个栈实现一个队列,实现队列的两个函数appendTail和deleteHead,分别完成从队列的尾部增加节点,从头部删除节点。双栈模拟队列appendTail和deleteHead:(1)abcd依次进入队列,我们将其存放在stack01中。 (2)我们需要将进行出队列操作,先进先出,则将stack01栈中的元素弹出到stack02栈中,之后a在stack02的栈顶出栈即...原创 2019-08-01 17:09:07 · 341 阅读 · 0 评论 -
(java)从尾到头打印链表——三种方法解
题目:输入一个链表的头节点,从尾到头反过来打印每个节点的值。三种实现方式:改变原有链表,将链表指针反转,再进行遍历反转链表打印。 遍历链表,遍历过程中将元素放入到栈中,再依次出栈打印。 使用递归,反过来输出链表。反转链表:package com.example.offer;import java.util.Stack;/** * 反向打印链表 */publi...原创 2019-07-23 17:54:48 · 728 阅读 · 0 评论 -
(java)二维数组中的查找
分析:此题目我们可以从右上角或者左下角进行比较。我们以右上角为例,每次拿右上角的元素与目标元素进行比较,分为三种情况,(1)右上角元素大于目标值,则目标元素在当前二维数组的下方;(2)右上角元素小于目标值,则目标元素在当前二维数组的左方;(3)等于则说明找到目标元素;代码实现如下:package com.example.offer;public class FindNumTes...原创 2019-07-22 17:44:46 · 432 阅读 · 0 评论 -
(java)剑锋Offer(找出数组中任意一个重复的数字)题目一
以下为代码实现:package com.example.offer;import java.util.HashMap;/** * 在一个长度为n的数组里的所有数字都在0-n-1的范围内。数组中某些数字是重复的, * 但是不知道有几个数字重复了,也不知道每个数字重复了多少次。 * 找出数组中任意重复的数字 */public class DuplicateTest { ...原创 2019-07-17 14:30:19 · 289 阅读 · 0 评论 -
(java)剑锋Offer(找出数组中任意一个重复的数字不改变原有数组)题目二
分析:题目一与题目二的区别:题目一没有规定不修改数组,题目一数组中值得范围在0-n-1;考虑题目一中的三种方法,只有方法二没有改变原有数组,所以方法二放到题目二同样的适用;但是我们可以把HashMap替换成数组实现。可以想想为什么题目一不适合使用题目中的方法一,题目二中的方法一与题目一中的方法二思路是一样的。以下为题目二的解法:方法一:遍历数组,我们将数组(oldArray)中的值放...原创 2019-07-18 14:20:11 · 317 阅读 · 1 评论 -
java敏感词处理(分词工具,DFA算法)
引入:敏感词是许多网站需要处理的功能点,以下介绍两种处理办法。敏感词过滤,系统会有一个敏感词库,需要做的功能是发送的语句中是否包含敏感词,包含哪些敏感词,将语句中的敏感词进行替换。方法一:语句采用分词工具进行分词,再与敏感词库进行匹配查找。方法二:采用DFA算法进行敏感词匹配。方法一:采用分词工具实现敏感词过滤(IKAnalyzer3.2.5Stable.jar)package com....原创 2019-06-03 16:04:31 · 3350 阅读 · 0 评论 -
剑指 offer(查找数组中重复的数字)
题目描述:在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。解题思路:要求复杂度为 O(N) + O(1),也就是时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。对于这种数组元素在 [0, n-1] 范围内的问...原创 2019-02-11 13:54:01 · 329 阅读 · 0 评论 -
剑指offer(java)——在递增旋转数组中查找最小值
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。题目关键词:递增排序、旋转。分析:上图是符合题目要求的三种数组,第一种是很正规的一种情况:数组因为旋转的原因,分成两个递增数组,而最小值位于后面数组的第一个值。针对此题,首先要...原创 2019-09-04 15:06:22 · 271 阅读 · 0 评论