剑指offer算法题
strong tyj
在校学生
展开
-
剑指offer算法题Java版【2】:二维数组中的查找
/** * 题目二:二维数组中的查找 * * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 * @author tangyejun */本题我提供了两种解法,希望能够帮到你:1. 暴力法,两层for循环:public static boolea...原创 2020-04-22 13:53:28 · 246 阅读 · 0 评论 -
剑指offer算法题Java版【1】:找出数组中的重复数字
/** * 题目一:找出数组中的重复数字 * * 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。 * 也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3}, * 那么对应的输出是第一个重复的数字2。 * @author tangyejun */本文给...原创 2020-04-22 13:49:28 · 302 阅读 · 0 评论 -
剑指offer算法题【14】:二进制中1的个数(位运算)
题目输入一个整数,输出该数二进制表示中1的个数。容易引起死循环的解法 def solution1(self,n): count = 0 # 用于计算1的个数 while n: # 只要还不等于0 if (n & 1): # 如果n和1相与为1,代表最低位为1,其中&表示位运算 co...原创 2019-12-19 17:12:26 · 124 阅读 · 0 评论 -
剑指offer算法题【13】:剪绳子(动态规划以及贪心算法)
题目思路动态规划如果要求一个问题的最优解,而且该问题能分成若干个子问题,整体问题的最优解依赖于子问题的最优解,可以考虑用动态规划解决。动态规划一般是自顶向下思考,自底向上实现的,为什么字底向上呢?因为字底向上所消耗的内存空间少很多,为了避免计算子问题时重复,可以将子问题的结果表记录下来。先自上而下分析,在长度为n的绳子所求为f(n),剪下一刀后剩下的两段长度是i和n-i...原创 2019-12-18 15:44:40 · 326 阅读 · 2 评论 -
剑指offer算法题【12】:机器人的运动范围
1. 题目 题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?2. 思路...原创 2019-11-21 16:34:36 · 227 阅读 · 0 评论 -
剑指offer算法题【11】:矩阵中的路径(Python实现)
一. 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[a,b,t,g,c,f,c,s,j,d,e,h 矩阵中包含一条字符串"bfce"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个...原创 2019-11-20 11:23:38 · 364 阅读 · 0 评论 -
剑指offer算法题【10】:旋转数组的最小数字(Python实现)
题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。注意:给出的所有元素都大于0,若数组大小为0,请返回0。1. 思路 二分法:如果中间元素位于前面递增的子数组,那么它应该大于或者等于第一个指针指...原创 2019-11-05 09:43:11 · 169 阅读 · 0 评论 -
剑指offer算法题【9】:青蛙跳台阶(Python实现)
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。1. 思路 对于本题,条件是 一次只能跳 1阶或者2阶的跳法。(1).如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);(2).假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)(3).由...原创 2019-11-04 20:20:13 · 627 阅读 · 1 评论 -
剑指offer算法题【8】:斐波那契数列(Python实现)
题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。1. 思路 思路(1):递归,虽然递归可以做,但是复杂度太高,有很多重复计算,比如计算10的斐波那契数列:这样就有很多重复计算。 思路(2):自底向上循环计算,从下往上加,一直加到n2. 代码import timeclass Sol...原创 2019-11-04 15:58:56 · 187 阅读 · 0 评论 -
剑指offer算法题【7】:两个栈实现队列(Python实现)
题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型1. 思路 有两个栈stackA、stackB,A是负责入栈的,B是负责出栈的,要想入栈,直接push进A,要想出栈,先判断是否有元素,如果B没有元素,pop肯定不行,正确的做法应该是先将A中所有的元素压倒B里面,再pop最上面一个元素,如果B中有就直接pop出,就可以,...原创 2019-11-04 14:39:28 · 133 阅读 · 0 评论 -
剑指offer算法题【6】:二叉树的下一个节点(Python实现)
题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。1. 思路 (1) 若该节点存在右子树:则下一个节点为右子树最左子节点 (2) 若该节点不存在右子树:这时分两种情况: 2.1 该节点为父节点的左子节点,则下一个节点为其父节点 ...原创 2019-11-04 11:02:20 · 122 阅读 · 0 评论 -
剑指offer算法题【5】:重建二叉树(Python实现)
一. 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。1. 思路 思路(1):递归 根据前序序列和中序序列,我们可以知道,前序序列的第一个数字1就是根节...原创 2019-11-01 10:00:48 · 100 阅读 · 0 评论 -
剑指offer算法题【4】:从尾到头打印链表(逆序打印链表)(Python实现)
一. 题目 输入一个链表,从尾到头打印链表每个节点的值。1. 思路 思路(1):使用extend,在尾部插入,其实最关键在于[::-1],只不过输入数据多样化,有可能还是集合,所以转成列表这个方法效率应该还可以。当然也可以一个一个append进去,存储链表的所有值到列表,再反转这个列表。如果我们不使用列表的切片[::-1]来反转也可以反向遍历列表for i i...原创 2019-10-31 17:02:43 · 180 阅读 · 0 评论 -
剑指offer算法题【3】:替换空格(替换字符串)(Python实现)
一. 题目 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1. 思路 (1)用Python当然可以偷懒,直接用Python的内置函数replace即可,时间复杂度O(n**2) (2)如果想要控制时间复杂度在O(n),关键是替换是从往后往前遍历还是从前往后...原创 2019-10-30 15:56:33 · 302 阅读 · 0 评论 -
剑指offer算法题【2】:二维数组中的查找(Python实现)
一. 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1. 思路: (1)暴力破解,遍历查找 (2)选用右上角作为基准,如果目标值小于基准元素,去掉基准元素那一列;如果目标值大于基准元素,去掉基准元素那一行。循环往复。这样我们使用i , ...原创 2019-10-30 14:38:38 · 217 阅读 · 0 评论 -
剑指offer算法题【1】:找出数组中重复的数字(Python实现)
题目一(1): 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2,重复数字是2或者3。一. 思路: 1.排序,将数组排序之后,要找出重复的数字就...原创 2019-10-25 15:51:51 · 1385 阅读 · 0 评论