随笔分类 - 剑指Offer
记录一部分牛客网的剑指offer的题目
摘要:根据题目描述可知,此题要求的1是由[1,n]之间所有数的位数为1的个数 测试用例:10,112,226 112 个位:[1][11,21,...,111] 1 + 11*1 十位:[10,11,...,19][110,...,112] 10 + 3 百位:[100,...,112][] 13 226
阅读全文
摘要:剑指offer 两道关于 数据结构——栈 的题目 1. 包含min函数的栈 简要分析一下这道题,这道题做了3遍才过,踩了一些小坑 看看示例: 得到了规律,那么关键部分的代码实现,就在于 两个栈(rawStack 和 minStack) 和 push() 方法 其他部分就比较简单 2. 栈的压入、弹出
阅读全文
摘要:题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则 解题思路: 两个链表都是单调递增的,故可以通过递归比较,得到排列后的新链表,下面上代码
阅读全文
摘要:简要描述一下思路: 遍历第一遍,得到链表节点总个数count;第二次遍历count - k次即可(需要注意一下条件的判定) 下面贴代码: 后面看到一个更简单的方法,使用的是2个链表节点,只需要遍历一次即可;后续补上这种写法
阅读全文
摘要:这道题,思考过,目前想的解决方案是使用双链表解决。 下面贴自己的Java代码实现:
阅读全文
摘要:跳台阶和变态跳台阶这两道题比较类似,就放到一块来了 这两道题的解题思路我是用的一样的,都是递归求解 当每次只能跳1或2台阶时候,f(n) = f(n 2) + f(n 1),f(1) = 1,f(2) = 2 而当每次可跳1或2或3一直到n台阶时,f(n) = f(n 1) + f(n 2) + .
阅读全文
摘要:"什么是斐波那契数列" f(n) = f(n 1) + f(n 2),f(1) = 1,f(2) = 1 一道简单的题目 思路过于简略(循环增加得值即可),就不写了,看代码就行 我的代码如下: 主要运用的循环的思想,不断得到 f(n 1) 和 f(n 2) 的值 进度 10/66
阅读全文
摘要:前言: 这道题是要根据前序和中序遍历的结果来构建二叉树,并返回根节点 这里写下我的解题思路: 前序遍历:根 左 右;中序遍历:左 根 右 那么,每次前序遍历的首元素,在中序遍历的数组中的下标,就可以将中序数组分为左右两个子树;而中序分为两个子树,那么相应的前序也可以分为两个子树; 这样,不断递归,一
阅读全文
摘要:前言: emm,这题要做很简单,不过应该有更好的方法 还是惯例,先写一下自己的思路:这题感觉没什么思路,就简单JDK自带的方法就可以做出来,这里我的解法用到了JDK8的Stream流的部分API。 下面贴代码: emm,应该有更优解,后续我会再补上优解 进度 9/66 emm,有些难的做的久的题目没
阅读全文
摘要:前言: 这也是一道比较简单的题目 下面说说我的思路吧 思路:两个栈,一个栈是push()方法中存放元素的栈(stack1);在pop()方法中,将stack1的除首元素外的所有元素循环出栈给stack2,那么stack1的出栈操作即可拿到队列的pop()的返回值,然后将stack1清空,将stack
阅读全文
摘要:首先,这道题很简单,但它的解法有不少,这里提供3种 第一种,暴力 穷举法 ,时间复杂度 m n 第二种,根据题目给的该二维数组的特性,每行都是递增的数组,可以使用 二分(折半)查找 来解,该解法的 时间复杂度为 mlog2n 第三种,就基本是根据题目给的二维数组的 特性 来解了,每行递增,每列也是递
阅读全文

浙公网安备 33010602011771号