摘要: 斐波那契数列 题目链接 Solution 求斐波那契数列第n项。 实现方法很多,递推,递归,记忆化搜索,以及通项公式。 递推方法如下: 根据斐波那契的地推公式:\(f[n] = f[n - 1] + f[n - 2]\) Code class Solution { public: int Fibon 阅读全文
posted @ 2020-11-26 23:32 mjt233 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 拼接所有的字符串产生字典序最小的字符串 题目链接 Solution 是拼接后的字符串字典序最小。 根据贪心的思路,字典序小的放在前面比较优秀。比如"abc"放到"bca"的前面更好。 但是这样有个问题,就是字符串长度的问题,比如"bc""bca"此时应该将字典序大的"bca"放到前面。 为了解决此问 阅读全文
posted @ 2020-11-26 23:31 mjt233 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 丑数 题目链接 Solution 丑数是任意个2,3,5相乘得到的。 每个丑数都可以乘以一个2,3,5得到一个新的丑数。 根绝这个思想,我们可以递推出所有的丑数。 首先顶一个数组存储所有的丑数,并从头开始扫描所有丑数,每个丑数都乘以2,3,5,得到新的丑数。所以设三个指针分别表示接拿下来轮到那个数乘 阅读全文
posted @ 2020-11-26 23:30 mjt233 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 最小的K个数 题目链接 Solution 求最小的k个数。 首先肯定是将数组从小到大排序,不然不好选择。 然后从头开始取k个数即可。 Code class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> inpu 阅读全文
posted @ 2020-11-26 23:29 mjt233 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 字符串的排列 题目链接 Solution 计算一个字符串的所有排列。 c++ stL库中有一个$next_permutation()$函数是可以按字典序大小计算出当前排列的下一个排列的,同样$pre_permutation$可以计算出上一个排列。 所以我们可以将字符串排序,然后依次计算下一个排列即可 阅读全文
posted @ 2020-11-26 23:26 mjt233 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 反转字符串 题目链接 Solution 将字符串反转。 实现方法很多,比如reverse函数。 但是模拟下也不难,直接从后往前扫一遍即可。 Code class Solution { public: string solve(string str) { string ans; for (int i 阅读全文
posted @ 2020-11-26 23:22 mjt233 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 找到字符串的最长无重复字符子串 题目链接 Solution 寻找最长的无重复子串。 考虑以一个位置结尾的可以往前延伸到的位置,根据此位置求出无重复子串的长度。 具体操作可以记录一个指针,这个指针记录到当前位置时,可以往前延伸的最前的位置。 考虑如何更新指针,从一个位置到下一个位置时,加入了一个数a: 阅读全文
posted @ 2020-11-26 23:20 mjt233 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 岛屿数量 题目链接 Solution 给定一个方格图,求联通块的个数。 求联通块,并查集可做。 我们可以把所有相邻的两个是1的位置,用并查集合并起来,最后计算有多少个并查集即可。 具体实现:扫描整个地图,如果是1,看其上下左右是不是1,如果是,合并。 详见代码,附有注释。 Code class So 阅读全文
posted @ 2020-11-26 22:57 mjt233 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 排序 题目链接 Solution 单纯的考察讲一个vector排序。 排序方法有很多种,如快速排序,归并排序,冒泡排序,选择排序等。 但最简单的是调用algorithm库中的sort函数,详见代码。 Code class Solution { public: vector<int> MySort(v 阅读全文
posted @ 2020-11-26 22:44 mjt233 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 股票交易的最大收益 题目链接 Solution 已经知道每一天股票的价格,可以无限次交易,每天只能进行一次,询问最大收益。 这类问题可以动态规划解决。 设$f[i]$表示到第i天的时候,最大收益是多少。 首先$f[i]$可以直接从上一天继承过来,即$f[i] = f[i - 1]$。 其次,如果在第 阅读全文
posted @ 2020-11-26 22:26 mjt233 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 调整数组顺序使奇数位于偶数前面 题目链接 Solution 让奇数排在偶数前面。当然可以暴力的扫一遍,将奇数偶数分开然后组合合并。 但是algorithm库中的sort函数支持自定义排序函数,即让奇数偶数作为权值排序。 即用数字模2作为大小排序。 使用方式详见代码,代码较为简单易懂。 Code cl 阅读全文
posted @ 2020-11-26 22:10 mjt233 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 字符串变形 题目链接 Solution 将字符串按单词反转,并反转大小写。 从后往前扫,如果遇到空格,说明从这个空格的位置到下一个空格之间是一个单词。 然后将单词的每个字母依次取出,取出的过程变化大小写。 Code class Transform { public: char trans(char 阅读全文
posted @ 2020-11-26 22:09 mjt233 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 旋转字符串 题目链接 Solution 直接模拟即可。 枚举旋转了几位,然后求出旋转后的字符串,比较是否与原字符串相同。 注意一下,如果两个字符串长度不同,无论如何旋转都不可能相同的,直接返回false。 Code class Solution { public: bool solve(string 阅读全文
posted @ 2020-11-26 22:04 mjt233 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 连续子数组的最大和 题目链接 Solution 最大子段和问题,可以使用动态规划解决此问题。 设$dp[i]$表示以i结束的子段的最大子段和。 所以到i时有两种选择,和前面的最大子段结合,自己构成一个新的子段。 得到转移方程$dp_i = max{dp_{i - 1} + array_i, arra 阅读全文
posted @ 2020-11-26 22:03 mjt233 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 换钱的最少货币数 题目链接 Solution 问n种货币凑成一个面额所需要的最少货币数。 动态规划。 $dp_i$表示凑成面额i的需要的最少货币数。 然后枚举每个面额的货币,更新dp数组即可。 \(dp[i] = min(dp[i], dp[i - a[j]])\) Code class Solut 阅读全文
posted @ 2020-11-26 22:00 mjt233 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 最长公共前缀 题目链接 Solution 求n个串的最长公共前缀。 从0开始枚举答案,然后依次比较所有字符串的这一位,如果都相同,那么答案+1。 注意一下答案最大是最小的字符串的长度。 数据范围较小,暴力可过。 Code class Solution { public: string longest 阅读全文
posted @ 2020-11-26 21:57 mjt233 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 旋转数组 题目链接 Solution 模拟。 新建一个vector,先加入后面n-m个元素,然后加入前面m个元素即可。 代码实现较为简单,需要注意下m如果大于n的情况,需要让m模n。 Code class Solution { public: vector<int> solve(int n, int 阅读全文
posted @ 2020-11-26 21:56 mjt233 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 数字在升序数组中出现的次数 题目链接 Solution 暴力。 询问一个数出现的次数,扫一遍数组,如果当前数和这个数相等,答案+1。 没有什么太难的地方,详见代码,代码比较简单易懂。 当然因为数组是升序的,可以二分出第一个大于这个数的位置和第一个小于这个数的位置,然后做差得到答案,但是数据范围较小, 阅读全文
posted @ 2020-11-26 21:54 mjt233 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 反转数字 题目链接 Solution 将一个数字反转,思路比较简单,可以考虑分成两步。 首先将数字拆分成0-9,存下。 将拆分后的数字从后往前组合起来,即可实现反转操作。 Code class Solution { public: int reverse(int x) { int ans = 0, 阅读全文
posted @ 2020-11-26 21:52 mjt233 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 数组中出现次数超过一半的数字 题目链接 Solution 求出现次数大于一半的数。 直接开一个map,统计每个数字出现的个数,最后扫一遍原数组,找到出现次数大于一半的数字即可。 Code class Solution { public: int MoreThanHalfNum_Solution(ve 阅读全文
posted @ 2020-11-26 21:51 mjt233 阅读(79) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示