
剑指offer
Lawliet_ZMZ
ACMERandNODER
展开
-
剑指offer(一) 二维数组的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 第一种方法,在每一行进行二分查找,NlogN。 第二种方法,也可能是最好的,因为已经是有序的,我们选取左下角或者右上角,每次进行判断大小,选择上移或者右移,这样每次都有贪心选择,但是这样的时间复杂度怎么确原创 2017-11-05 21:52:41 · 253 阅读 · 0 评论 -
剑指offer(二十,二十一,二十二)包含min函数的栈,字符串的排列,数组中出现超过一半的数字
20:包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 感觉题目很无聊。。。我大js做这题就是方便,也让我深刻意识到相对其他语言js继承的强大性和灵活性。。。 var stack = []; function push(node) { stack.push(node); } function pop() { s...原创 2018-06-01 11:59:09 · 262 阅读 · 0 评论 -
剑指offer(十七,十八,十九)树的子结构,二叉树的镜像,顺时针打印矩阵
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 简单题,判断好每种情况,(原来剑指offer这个oj需要把js的函数写在给的solution函数里才能AC啊) /* function TreeNode(x) { this.val = x; this.left = null; this.right =...原创 2018-05-29 17:50:49 · 238 阅读 · 0 评论 -
剑指offer(十六) 合并两个排序的链表
合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 用JavaScript非递归和递归方式都AC了。 非递归: function ListNode(x){ this.val = x; this.next = null; } function Merge(pHead1, pHead2) { ...原创 2018-02-10 20:08:15 · 219 阅读 · 0 评论 -
剑指offer(十四,十五)链表中倒数第k个结点,反转链表
链表中倒数第k个结点 时间限制:1秒 空间限制:32768K 题目描述 输入一个链表,输出该链表中倒数第k个结点。 现在链表题都是要跟“倒立”联系=-=,看到这个问题,自然想到以前用递归巧妙倒序打印链表。 如果是打印倒数第k个节点的val值得话: var arr = new Array(); var flag = 0; function FindKthToTail(head, k原创 2018-02-03 12:57:48 · 209 阅读 · 0 评论 -
剑指offer(九,十) 变态跳台阶,矩形覆盖
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 一开始的思路最暴力的就是打表,没想到直接过了。。数据弱嘛 class Solution { int ans[105] = {1,2,4,8}; public: int jumpFloorII(int number) { for(int i =原创 2018-01-10 18:20:52 · 251 阅读 · 0 评论 -
剑指offer(十二,十三) 数值的整数次方,调整数组顺序使奇数位于偶数前面
1.数值的整数次方 时间限制:1秒 空间限制:32768K 题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 标准的快速幂。。。注意base为0 return 0,我用JS抛出错误在oj上错了 QAQ 还有就是负数的情况,变正,然后倒回来。 其实这个base是double类型,C++里面的话不能直接比较,需要写个原创 2018-02-01 00:39:17 · 236 阅读 · 0 评论 -
剑指offer(七,八),斐波拉切数列,跳台阶
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 大概所有同学C语言课程都敲过吧,那么这里我就不说那两个简单的方法,递归和迭代。 但是比较大的情况呢,甚至超过int范围,这就要考虑数学问题。 用矩阵计算的,在线性代数里的计算方法就是 n的次方结合矩阵快速幂,时间复杂度是logn,快速幂的时间复杂度,比普通的迭代n的复杂度低,也解决了大数的问题(原创 2018-01-06 20:27:26 · 427 阅读 · 0 评论 -
剑指offer(三) 从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值。 这个其实我才出题人是想考察递归的,但是做法可以直接另开个数组,遍历链表的时候push链表val值,最后reverse即可。但是递归方法更加优美啊,通过递归进入链表底部,从下往上push,其实就是用递归模拟了栈的思想,我一直认为栈就是用迭代来模拟递归的过程。那么递归可以做,栈肯定也就可以做这道题。为了巩固JS,以后刷题尽量使用JS吧。 注意牛客原创 2017-12-25 15:19:31 · 375 阅读 · 0 评论 -
剑指offer(十一) 二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 剑指offer的题做起来真是可以补坑。。。 这道题一看就是要用位运算来解决了。位运算的需要点计算机组成原理的知识,不然这道题还是有小坑的。 首先正数和负数在内存中都是以补码存储的,正数的补码就是它本身,负数的补码是它的绝对值取反加一。关于原码反码补码,详解可看: http://blog.youkuaiyun.com/u011原创 2018-01-11 00:03:26 · 269 阅读 · 0 评论 -
剑指offer(五,六),用两个栈实现队列,旋转数组的最小数字
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 一个栈就是把队列反过来,那再来一个栈push进第一个栈就“正”过来了。 第一个栈就是存下反过来的序列。 每次push进一个数,要先判断stack2“正”序列是否为空,不为空要还原“反序列”,还要stack1 push进所有的stack2。 每次pop一个数,把stack1全部push进来,就变成了原创 2017-12-31 01:45:51 · 253 阅读 · 0 评论 -
剑指offer(四) 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 这道题就比较经典了,经典递归。JS版:(我加了测试) function TreeNode(x) { this.val = x; this.原创 2017-12-25 15:23:01 · 186 阅读 · 0 评论 -
剑指offer(二) 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 一开始想到是split("\\s"),但是发现有"hello " "hello hello "的数据啊,分割后空格是不会被分配到一个数组,然后就直接replaceAll了,和replace的区别就是前者支持正则把。原创 2017-11-07 19:31:19 · 223 阅读 · 0 评论 -
剑指offer(二十三,二十四,二十五)最小的k个数,连续子数组的最大和,链表中环的入口节点
二十三:最小的k个数 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 还是简单题, function GetLeastNumbers_Solution(input, k) { if(k>input.length) return []; let ans = []; ...原创 2018-06-01 20:37:47 · 302 阅读 · 0 评论