剑指offer
earlene_wyl
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列题目描述:输入一个字符串(字符可能有重复),打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]解题思路:经典的dfs全排列+一点小套路1. 为了避免重复,先sort一下,让重复的数字挨着2. 剪枝: 除了被访问过不能再用之外,假如 i>0 && nums【i原创 2021-10-23 14:55:29 · 89 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子
剑指 Offer 14- I. 剪绳子题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1解题思路:这题用动态规原创 2021-10-20 20:47:18 · 81 阅读 · 0 评论 -
剑指offer.4 二维数组的查找
剑指offer.4 二维数组的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:从数组的左下角or右上角出发均可下面的代码从右上角出发代码:class Solution {public: ...原创 2019-08-05 18:49:14 · 103 阅读 · 0 评论 -
剑指offer. 5替换空格
剑指offer. 5替换空格题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。...原创 2019-08-05 19:01:24 · 85 阅读 · 0 评论 -
剑指offer. 39 数组中出现次数超过一半的数字
剑指offer. 40 数组中出现次数超过一半的数字题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路:解法1:在无序数组中找到第k位的数字,用快速选择算法(O(N))题目要求是出现次数超过一半,那...原创 2019-08-02 15:01:49 · 119 阅读 · 0 评论 -
剑指offer. 27 二叉树的镜像
剑指offer. 27二叉树的镜像题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / ...原创 2019-08-06 23:05:40 · 101 阅读 · 0 评论 -
剑指offer总结
剑指offer第1题~第10题【剑指offer】面试题3 数组中重复的数字【剑指offer】面试题4 二维数组中的查找【剑指offer】面试题5 替换空格【剑指offer】面试题6 从尾到头打印链表【剑指offer】面试题7重建二叉树【剑指offer】面试题8二叉树的下一个节点【剑指offer】面试题9用两个栈实现队列【剑指offer】面试题10斐波那契数列...原创 2019-10-11 23:55:55 · 167 阅读 · 0 评论 -
剑指offer. 12 矩阵中的路径
剑指offer. 12矩阵中的路径题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含...原创 2019-10-09 02:06:13 · 105 阅读 · 0 评论 -
剑指offer. 17 打印从1到最大的n位数
剑指offer.17打印从1到最大的n位数题目描述:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,打印出1,2,3,一直到最大的3位数999.解题思路:n位数的全排列,每个位置上从0到9遍历一遍,然后打印的时候,不要打印前导0代码://void dfs(string& s, int cur, int len) { if (cur ...原创 2019-10-09 03:00:31 · 102 阅读 · 0 评论 -
剑指offer. 19 正则表达式匹配
剑指offer. 19正则表达式匹配题目描述:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配解题思路:ab*a表示b可以出现...原创 2019-10-09 03:15:03 · 106 阅读 · 0 评论 -
剑指offer. 13 机器人的运动范围
剑指offer.13 机器人的运动范围题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格...原创 2019-08-05 16:58:29 · 168 阅读 · 0 评论 -
剑指offer. 62 圆圈中最后的数字(约瑟夫环)
剑指offer. 62圆圈中最后的数字(约瑟夫环)题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他...原创 2019-08-04 21:01:11 · 138 阅读 · 0 评论 -
剑指offer. 61 扑克牌顺子
剑指offer. 61扑克牌顺子题目描述:5张牌,把A看作1,J为11,Q为12,K为13。大小王可以看作任何数(在vector里面是0),如果能组成顺子,返回true,否则返回false解题思路:顺子必须满足两个条件1. 除0外没有重复的数2. 不算0 的最大数-最小数< 5代码:class Solution {public: bool...原创 2019-08-04 20:04:59 · 133 阅读 · 0 评论 -
剑指offer. 41 数据流中的中位数 (重要)
剑指offer. 41数据流中的中位数 (重要)题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题思路:用两个堆,一个大顶堆来维...原创 2019-08-02 16:24:15 · 112 阅读 · 0 评论 -
剑指offer. 42 连续子数组的最大和(重要)
剑指offer. 42连续子数组的最大和(重要)题目描述:输入一个整形数组,数组里有正数和负数。数组中的一个或连续多个整数数组做成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n),如:{1,-2,3,10,-4,7,2,-5}, 和最大的子数组是{3,10,-4,7,2},所以输出和 18解题思路:解法1:动态规划这种找子数组最优,一般解法是依次求以x...原创 2019-08-02 16:58:10 · 132 阅读 · 0 评论 -
剑指offer. 43 数字1的个数
剑指offer. 43数字1的个数题目描述:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。解题思路:解法1:挨个算1的次数 O(NlogN) (log以10为底)解法2:递归算左神p495 O(logn)神...原创 2019-08-02 21:13:53 · 222 阅读 · 0 评论 -
剑指offer. 45 把数组排成最小的数(重要)
剑指offer. 45把数组排成最小的数(重要)题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:实际上只要定义一种排序规则即可:两个数a,b 假如 ab>ba,那a就大于b,而ab和ba的大小比较可以用字符串大小比较的规则...原创 2019-08-02 21:28:02 · 178 阅读 · 0 评论 -
leetcode 91. 解码方法 medium (对应剑指46)
leetcode91. 解码方法medium 题目描述:一条包含字母A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。(注意可能是 10(代表1种解码方式),甚至100(0种解码方式))示例 1:输入: "12"输出: 2解释...原创 2019-08-02 22:47:22 · 337 阅读 · 0 评论 -
剑指offer. 53 数字在排序数组中出现的次数
剑指offer. 53数字在排序数组中出现的次数题目描述:统计一个数字在排序数组中出现的次数。解题思路:分别用二分找到第一个k和最后一个k代码:class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.empty()) ...原创 2019-08-04 15:08:23 · 98 阅读 · 0 评论 -
剑指offer. 58-1 翻转单词顺序序列
剑指offer. 58-1 翻转单词顺序序列题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词...原创 2019-08-04 15:28:21 · 143 阅读 · 0 评论 -
剑指offer. 58-2 左旋转字符串
剑指offer. 58-2左旋转字符串题目描述:对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路:假如字符串abc0位:abc1位:bca2位:cab3位:abc (即0位)代码:class Sol...原创 2019-08-04 15:30:44 · 104 阅读 · 0 评论 -
骰子游戏 (牛客)
骰子游戏牛客链接题目描述:小易参加了一个骰子游戏,这个游戏需要同时投掷n个骰子,每个骰子都是一个印有数字1~6的均匀正方体。小易同时投掷出这n个骰子,如果这n个骰子向上面的数字之和大于等于x,小易就会获得游戏奖励。小易想让你帮他算算他获得奖励的概率有多大。输入描述:输入包括两个正整数n和x(1 ≤ n < 25, 1 ≤ x < 150),分别表示骰子的个数...原创 2019-08-04 19:05:18 · 1418 阅读 · 0 评论 -
剑指offer. 40 最小的k个数 top(k)(重要)
剑指offer. 40 最小的k个数top(k)(重要)题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路:解法1:快速选择,定位下标为k-1的数,O(n)解法2:海量数据topk问题。大(小)顶堆(O(nlogk))假如求最小的k个,用大顶堆priority_qu...原创 2019-08-02 16:11:16 · 359 阅读 · 0 评论