
剑指offer
skj1995
数据挖掘、机器学习、Python编程
展开
-
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
两种方法:第一种:排列组合的方法:假设2*number的矩形,需要2*1的矩形个数为H,需要1*2的为S。容易得到等式H+S=number(列数关系得到的).举例如下:比如number=5,这样H的取值为0、2、4,当H为0时,S为5,只有一种。当H为2时,S为3,这时候就相当于SSSH的全排列个数,为(4!)/((3!)*(1!))当H为4时,S为1,这时就相当于SHH的...原创 2019-06-12 16:41:00 · 922 阅读 · 0 评论 -
链表中环的入口节点
一.题目如下:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。二. 思路如下:首先是判断链表中是否有环,这里使用双指针,分成快慢两个指针。如果有环的话,指针进入环内就会变成追赶问题。先进环的快指针一定会追上慢指针。这里设置慢指针每次移动一步,快指针每次移动两步,也就是说快指针的速度为慢指针速度的两倍。判定有环之后,在开头重新再定义一个指针,这个指针每次走一步...原创 2019-09-03 16:30:26 · 106 阅读 · 0 评论 -
数组中只出现一次的数字
一.一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。二.思路:(1)首先使用异或逐个计算数字,异或的性质有:0异或任何数字的结果都是该数字本身;a^b^c=a^c^b这样的话异或的结果就是两个只出现一次的数字的异或(2)我们根据上面的异或结果将数据分成两部分,首先找到上面异或结果中第一次出现的1位,根据该位是否为1将数字分成两部分进行异或...原创 2019-08-29 22:08:27 · 124 阅读 · 0 评论 -
整数中1出现的次数
一.题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。二. 思路分别按照个位、十位、百位、...上1出现的个数统计...原创 2019-08-29 15:13:12 · 107 阅读 · 0 评论 -
正则表达式匹配
一.题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配二.思路整理情况比较复杂,下面一一列出:(1)首先我使用的方法是递归实现,先...原创 2019-07-27 18:16:07 · 134 阅读 · 0 评论 -
孩子们的数(圆圈中最后剩下的数)
一.题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去...原创 2019-07-23 21:12:39 · 135 阅读 · 0 评论 -
连续子数组的最大和
一.题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子...原创 2019-07-09 19:46:42 · 767 阅读 · 0 评论 -
二叉搜索树与双向链表
一.题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二.思路:这个题目在牛客网上通过的代码中看的答案有点难以理解,自己按照自己的思路写了一个,比较容易理解。很明显这是一个二分法或者说递归解决的问题。首先假设Root的左右节点都存在,考虑最理想的情况。这时候分别对左右子树进行处理。首先是左子树,调用本函数返回...原创 2019-07-03 23:27:11 · 141 阅读 · 0 评论 -
两个链表的第一个公共节点
一.题目描述:输入两个链表,找出它们的第一个公共结点。二.思路:别人一般的思路是:先将两个链表存储到两个栈里面,然后对比两个栈的栈头,如果一样则继续出栈,如果不一样,就输出上一个出栈的节点还可以使用一个栈,将一样的节点存入栈中,然后遍历两个链表中的任何一个,碰到第一个在栈内的就输出,当然肯定是第一种方法时间复杂度比较低。第二个方法的AC代码如下:# -*- coding:ut...原创 2019-07-12 19:36:27 · 127 阅读 · 0 评论 -
树的子结构
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)两种方法:递归的和非递归的第一种:递归的方法:思路:对于给定的树A和树B,如果B是A的子树,有三种情况:第一种:A和B的根相等,这时候判断A和B的左右子树是否分别相等第二种:B存在于A的左子树中,递归调用本函数第三种:B存在于A的右子树中,递归调用本函数这三种情况中,...原创 2019-06-20 13:14:28 · 179 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。两种方法:第一种,使用排序方法,我感觉这里考察的是对常见排序算法的理解,下面使用插入和冒泡两种排序思想实现:插入:# -*- coding:utf-8 -*-class Solution: ...原创 2019-06-13 17:06:37 · 115 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
Python代码如下:# -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): # write code here return sum([n>>i&1 for i in range(0,32)])需要注意的是:1.按位与运算是补码之间的运算,所以这道题能用...原创 2019-06-13 14:52:02 · 182 阅读 · 0 评论 -
变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:这个问题非常容易将表达式写成如下形式就停止:F(n)=F(0)+F(1)+F(2)+...+F(n-1)其实我们可以发现还可以写成如下更加简洁的形式:F(n)=2*F(n-1)第一次做的时候写成了第一种形式,所以在这里记录一下,第二种的pyt...原创 2019-06-10 22:34:46 · 506 阅读 · 0 评论 -
剑指offer之构建乘积数组
一.题目描述:给定一个数组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]。不能使用除法。二.思路如果使用两层循环当然很好求解,时间复杂度为O(lenA^2),但是面试中一般会要求时间复杂度为O(lenA)于是可以看一下当前B[i]的求解是不是可以找到与前面...原创 2019-09-17 16:00:29 · 153 阅读 · 0 评论