
剑指offer
qq_39322743
这个作者很懒,什么都没留下…
展开
-
栈的压入弹出序列判断——Python实现
题目描述给定两个整数序列,第一个序列为压栈顺序,判断第二个序列是否是第一个序列的出栈顺序。(两个序列长度相等)input: 1 2 3 4 5 , 4 3 5 1 2output: False解题思路直接模拟。用一个list模拟进栈操作,进栈的同时,将当前栈顶元素与出栈序列比较,若相同,弹出栈顶元素,出栈次数加1;最后统计出栈次数,若总次数和序列长度相等,结果为True,否则为Fals...原创 2020-04-11 02:08:32 · 425 阅读 · 0 评论 -
减绳子——Python实现
题目描述思路参考代码原创 2020-03-31 00:19:18 · 256 阅读 · 0 评论 -
礼物的最大值——Python实现
题目描述在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?思路从左上角(0,0)走到右下角(m-1,n-1),每次只能向下或向右移动一格,选择价值最大的一条路径,很明显这是一道动态规划题。递推式:dp[i][...原创 2020-03-28 02:03:37 · 367 阅读 · 0 评论 -
数组中出现次数超过一半的数字——Python实现
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。input:[2,2,1,1,1,2,2]output:2思路看完题目首先想到的是排序,然后找到排在最中间的元素,统计该元素出现次数,若次数>n/2,则为多数元素,否则,不存在多数元素。扫描数组,记录各个元素出现的次数。当次数大于n/2时,则为多数元素。摩尔投票算法:...原创 2020-03-21 22:42:32 · 749 阅读 · 1 评论 -
不修改数组找出重复的数字——Python实现
题目描述给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。样例:给定长度为8的数组 nums = [2, 3, 5, 4,3, 2, 6,7]那么输出重复的数字2或者3.思路跟上一题一样,同样可以采用哈希表的方法,依次扫描各元素,放入哈希表中,当元素已在哈希表中存在时,则找到了重复的数。此...原创 2020-03-20 01:01:16 · 560 阅读 · 0 评论 -
数组中重复的数字
剑指Offer——数组中重复的数字题目描述思路参考代码题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路先将数组排序,然后比较相邻的两个数,若相等,则该数为其中一...原创 2020-03-19 22:55:24 · 183 阅读 · 0 评论 -
最小的k个数
转载自点击打开链接题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解法一:排序相信很多人会首先想到这种方法,先把数组按升序/降序进行排序,然后输出 K 个最小/最大的数。常规的排序方法时间复杂度至少是Θ(nlog2n)Θ(nlog2n)。(快排或堆排序)可能你会说,我们可以使用线性时间的排序算法。当然可以,但通常它们...转载 2018-03-17 15:55:02 · 205 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路一:从左向右扫描字符串替换一个字符替换为三个每遇到一个空格,空格后面所有字符向右移动两个位置字符串长度为n, 对每个空格而言,需要移动后面O(n)个字符算法的时间复杂度为O(n^2)思路二:从右到左扫描字符串替换统计空格数,字符串长度...原创 2018-03-17 15:25:02 · 130 阅读 · 0 评论 -
矩形覆盖——剑指offer
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路首先想到分治的思想。分治,分而治之。就是将原问题划分为n个规模较小,结构与原问题类似的小问题进行处理,递归地解决这些问题,然后再合并求解的过程。分为三个步骤: 1.分解:将原问题划分为n个规模较小,结构与原问题类似的小问题。 2.解决:若子问题规模小,足以...原创 2018-03-17 15:01:34 · 236 阅读 · 0 评论 -
剑指offer——跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路动态规划的思想。首先考虑最简单的情况,若只有1级台阶,显然只有1种跳法。若有两级台阶,则有两种跳法:一种是分两次跳,每次跳1级,另一种是一次性跳2级。接着考虑一般情况,当n>2时,第一次起跳有两种选择,一是跳一级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n原创 2017-11-29 22:58:38 · 136 阅读 · 0 评论 -
剑指offer——斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。(n解题思路斐波那契的定义如下:原创 2017-11-29 22:31:35 · 195 阅读 · 0 评论 -
剑指offer——用两个栈实现队列(Java)
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路考虑栈和队列的特性,栈为先进后出,队列为先进先出,可以认为栈A提供入队列即push的功能,栈B提供出队列即pop功能。对于push,直接将数据添加进栈A即可。对于pop,需要分两种情况考虑:1)若栈B不为空,则直接弹出栈B的数据。2)若栈B为空,则先依次弹出栈A的原创 2017-11-29 21:40:48 · 357 阅读 · 0 评论 -
剑指offer——数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路考虑指数为0,正数,负数以及底数为0的情况即可。传统方法:累乘,时间复杂度为O(n).public class Solution { public double Power(double base, int exponent) {原创 2017-11-29 21:09:11 · 209 阅读 · 0 评论 -
剑指offer——二维数组中的查找(JAVA)
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路利用二维数组从上到下、从左到右依次递增的规律,可以首先选取一个特殊位置(左下角或右上角)的元素与目标整数进行比较,以左下角元素为例:当目标整数target=a[row][col]时,说明targ原创 2017-11-29 20:30:08 · 244 阅读 · 0 评论 -
剑指offer——数组中的逆序数对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007.输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size 对于%75的数据,size 对于%100的数据,size示例:输入:1,2原创 2017-11-29 18:38:45 · 906 阅读 · 0 评论