03 2019 档案
摘要:题目描述 在一个二维数组(m x n)中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解法一:由于每一行都是有序的,我们可以针对每一行进行二分查找,时间复杂度为O(ml
阅读全文
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 解法:迭代解法和递归解法。 一、迭代解法:设置三个指针。主要思想就是边遍历链表的时候边反转。 1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int
阅读全文
摘要:题目:输入两个链表,找出它们的第一个公共结点。 思路:两个单链表从第一个公共节点后所有节点都会一样。可以暴力搜索,复杂度O(mn).可以从前往后,或者从后往前(利用栈)找到最后一个公共的节点。
阅读全文
摘要:题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 思路:动态规划。直接用递归太费时。
阅读全文
摘要:题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思路:动态规划。
阅读全文
摘要:题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:队列:先进先出。栈:先进后出。push操作的时候直接放入一个栈,pop操作的时候则从另一个栈取,那么另一个栈怎么存数据呢?当这个栈没有数据的时候,则从push栈取出所有数据,此时最先存进栈的数据回到这个
阅读全文
摘要:题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路:有很多方法,比如利用递归,只是要想办法去掉if终止条件判断,可以利用&&短路思想处理.
阅读全文
摘要:题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。 思路: 就这样,分别计算下三角和上三角,比如计算上三角的时候,利用动态规划思想,下三角同理
阅读全文
摘要:题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路:利用位运算
阅读全文
摘要:题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析:当n = 1, f[n] = 1, 表示直接跳1级台阶 n = 2, f[2] = f[1]+1, 表示从第1级台阶再跳1级台阶的跳法加上直接跳2级台阶 n = 3, f[3]
阅读全文
摘要:题目:操作给定的二叉树,将其变换为源二叉树的镜像。 如: 分析:递归的交换左右子树。也可以用栈实现。 解法一:递归 解法二:栈实现
阅读全文
摘要:题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 分析:层次遍历(广搜)。
阅读全文
摘要:题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。 分析:首先理解什么是平衡二叉树。平衡二叉树具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 很明显可以用递归解决。 解法一: 上述解法的不足在于在计算上层节点的时候,他会反复计算下层节点
阅读全文
摘要:题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 分析:恩。。没啥好分析的,很基础的一题,有多种解法,如递归,层次遍历。 解法一:递归 树的深度=max(左子树的深度, 右子树的深度)+ 节点本身的深度(为1) 递归终止条
阅读全文