
剑指offer
黑条纹的白斑马
这个作者很懒,什么都没留下…
展开
-
剑指offer4:二维数组中的查找
问题描述:在一个二维数组中,每一行都按从做到右递增顺序排序,每一列都按从上到下递增顺序排序。输入一个二维数组与一个整数,判断数组中是否有这个数。 思路:二维数组中查找,若按顺序,时间复杂度为o(n^2). 因为数组行列均递增.考虑如下数组: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 对右上角数字9而言...原创 2019-09-28 16:38:41 · 141 阅读 · 0 评论 -
剑指offer3: 数组重复数字
题目描述:在一个长度为n的数组里的所有数字都在0~n-1之间。数组中某些数字时重复的,但不知道有几个重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 思路一:哈希表法 使用一个长度为n的哈希s数组记录每个数字出现的次数。一边遍历数组一边查询哈希表,遍历一遍,时间复杂度为o(n),空间复杂度也为o(n). class Solution { public: // Par...原创 2019-09-28 16:40:28 · 112 阅读 · 0 评论 -
剑指offer9:两个栈实现队列
题目:用两个栈实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:队列的特点是先进先出,单个栈为先进后出。 class Solution { public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()){...原创 2019-09-28 16:41:47 · 146 阅读 · 0 评论 -
剑指offer6:逆向打印链表
问题描述:输入一个链表的头节点,反向打印出链表. 链表结构如下 struct ListNode { int val; ListNode *next; ListNode(int x): val(x), next(NULL){ } }; 思路:链表反向打印,先进后出,考虑使用栈. class Solution { public: void ...原创 2019-09-28 16:42:43 · 136 阅读 · 0 评论 -
剑指offer7:重构二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 对于二叉树,其前序遍历为(根左右),中序为(左根右). 依次取前序序列的节点为当前根节点,可以将中序遍历结果划分为左子树,根节点,右子树. 如图所...原创 2019-09-28 21:28:19 · 140 阅读 · 0 评论 -
剑指offer10:斐波那契数列
题目一: 求斐波那契数列的第n项. 斐波那契数列公式: f(0)=0f(0)=0f(0)=0 f(1)=1f(1)=1f(1)=1 f(n)=f(n−1)+f(n−2),n>1f(n)=f(n-1) + f(n-2),n>1f(n)=f(n−1)+f(n−2),n>1 对于斐波那契数列,学过程序语言的应该都知道. 教学时基本都是使用它来说明递归,导致一遇到这个问题的时候,一下就能...原创 2019-09-28 22:23:08 · 138 阅读 · 0 评论 -
剑指offer15:二进制中1的个数
题目: 请实现一个函数,输入一个整数,输出该二进制中表示1的个数. 对于二进制运算,主要是按位与、或、非. 1与1相与为1,1与0相与为0. 因此,算法主体为: while(n){ if(n & 1) count ++; n = n >>1; } 以上代码最容易想到,对于输入大于等于0的数而言,以上代码没有问题. 当输入负数时,负数在计算机中补...原创 2019-09-29 22:39:01 · 110 阅读 · 0 评论