mjt233
码龄5年
关注
提问 私信
  • 博客:6,197
    社区:3
    6,200
    总访问量
  • 31
    原创
  • 961,638
    排名
  • 0
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:贵州省
  • 加入CSDN时间: 2020-07-24
博客简介:

weixin_49607385的博客

查看详细资料
个人成就
  • 获得0次点赞
  • 内容获得0次评论
  • 获得1次收藏
创作历程
  • 31篇
    2020年
成就勋章
创作活动更多

新星杯·14天创作挑战营·第9期

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你们参加为期14天的创作挑战赛! 注: 1、参赛者可以进入活动群进行交流、分享创作心得,互相鼓励与支持(开卷),答疑及活动群请见 https://bbs.csdn.net/topics/619626357 2、文章质量分查询:https://www.csdn.net/qc

475人参与 去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

牛客题霸汇总

股票交易的最大收益 牛客 csdn 博客园 拼接所有的字符串产生字典序最小的字符串 牛客 csdn 博客园 丑数 牛客 csdn 博客园 岛屿数量 牛客 csdn 博客园 换钱的最少货币数 牛客 csdn 博客园 数字在升序数组中出现的次数 牛客 csdn 博客园 斐波那契数列 牛客 csdn 博客园 反转字符串 牛客 csdn 博客园 字符串的排列 牛客 csdn 博客园 最小的K个数 牛客 csdn 博客园 排序 牛客 csdn 博客园 找到字符串的最长无重复字符子串 牛客 csdn 博客园 旋转字符串
原创
发布博客 2020.11.28 ·
201 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

牛客题霸--斐波那契数列

斐波那契数列 题目链接 Solution 求斐波那契数列第n项。 实现方法很多,递推,递归,记忆化搜索,以及通项公式。 递推方法如下: 根据斐波那契的地推公式:f[n]=f[n−1]+f[n−2]f[n] = f[n - 1] + f[n - 2]f[n]=f[n−1]+f[n−2] Code class Solution { public: int Fibonacci(int n) { int f[50]; f[1] = f[2] = 1; for
原创
发布博客 2020.11.28 ·
177 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--反转字符串

反转字符串 题目链接 Solution 将字符串反转。 实现方法很多,比如reverse函数。 但是模拟下也不难,直接从后往前扫一遍即可。 Code class Solution { public: string solve(string str) { string ans; for (int i = str.size() - 1; i >= 0; --i) ans.push_back(str[i]); return ans; } };
原创
发布博客 2020.11.28 ·
205 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--字符串的排列

字符串的排列 题目链接 Solution 计算一个字符串的所有排列。 c++ stL库中有一个next_permutation()next\_permutation()next_permutation()函数是可以按字典序大小计算出当前排列的下一个排列的,同样pre_permutationpre\_permutationpre_permutation可以计算出上一个排列。 所以我们可以将字符串排序,然后依次计算下一个排列即可。 Code class Solution { public: vector
原创
发布博客 2020.11.28 ·
174 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--最小的K个数

最小的K个数 题目链接 Solution 求最小的k个数。 首先肯定是将数组从小到大排序,不然不好选择。 然后从头开始取k个数即可。 Code class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { sort(input.begin(), input.end()); vector<int> ans;
原创
发布博客 2020.11.28 ·
82 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--丑数

丑数 题目链接 Solution 丑数是任意个2,3,5相乘得到的。 每个丑数都可以乘以一个2,3,5得到一个新的丑数。 根绝这个思想,我们可以递推出所有的丑数。 首先顶一个数组存储所有的丑数,并从头开始扫描所有丑数,每个丑数都乘以2,3,5,得到新的丑数。所以设三个指针分别表示接拿下来轮到那个数乘2,乘3,乘5。 进行n次,即可得到第n个丑数。 Code class Solution { public: int GetUglyNumber_Solution(int index) {
原创
发布博客 2020.11.27 ·
87 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--拼接所有的字符串产生字典序最小的字符串

拼接所有的字符串产生字典序最小的字符串 题目链接 Solution 是拼接后的字符串字典序最小。 根据贪心的思路,字典序小的放在前面比较优秀。比如"abc"放到"bca"的前面更好。 但是这样有个问题,就是字符串长度的问题,比如"bc"“bca"此时应该将字典序大的"bca"放到前面。 为了解决此问题,不能直接按字典序排序,但是我们可以按照两个字符串连起来后的字符串的字典序排序。 比如"bc”“bca”,比较"bcbca"和"bcabc"那个字典序小,来确定"bc""bca"的位置。 Code class
原创
发布博客 2020.11.27 ·
561 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--股票交易的最大收益

股票交易的最大收益 题目链接 Solution 已经知道每一天股票的价格,可以无限次交易,每天只能进行一次,询问最大收益。 这类问题可以动态规划解决。 设f[i]f[i]f[i]表示到第i天的时候,最大收益是多少。 首先f[i]f[i]f[i]可以直接从上一天继承过来,即f[i]=f[i−1]f[i] = f[i - 1]f[i]=f[i−1]。 其次,如果在第i天卖出,那么需要选择一天买入,设第j天买入,则f[i]=max{f[j−1]+a[i]−a[j]}, j∈[0,i−1]f[i] = m
原创
发布博客 2020.11.27 ·
440 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--排序

排序 题目链接 Solution 单纯的考察讲一个vector排序。 排序方法有很多种,如快速排序,归并排序,冒泡排序,选择排序等。 但最简单的是调用algorithm库中的sort函数,详见代码。 Code class Solution { public: vector<int> MySort(vector<int>& arr) { sort(arr.begin(), arr.end()); return arr; } };
原创
发布博客 2020.11.27 ·
113 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--岛屿数量

岛屿数量 题目链接 Solution 给定一个方格图,求联通块的个数。 求联通块,并查集可做。 我们可以把所有相邻的两个是1的位置,用并查集合并起来,最后计算有多少个并查集即可。 具体实现:扫描整个地图,如果是1,看其上下左右是不是1,如果是,合并。 详见代码,附有注释。 Code class Solution { public: int n, m, f[40005], vis[40005]; int dx[4] = {0, 0, -1, 1}; int dy[4] = {-1, 1
原创
发布博客 2020.11.27 ·
174 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--找到字符串的最长无重复字符子串

找到字符串的最长无重复字符子串 题目链接 Solution 寻找最长的无重复子串。 考虑以一个位置结尾的可以往前延伸到的位置,根据此位置求出无重复子串的长度。 具体操作可以记录一个指针,这个指针记录到当前位置时,可以往前延伸的最前的位置。 考虑如何更新指针,从一个位置到下一个位置时,加入了一个数a: 如果a在前面没有出现过,指针不变,并记下这个数。 如果a出现过,那么指针的位置要大于a上次出现的位置,即now=max(now,last[a]); 所以定义一个map,时刻更新每个数字上次出现的位置即可。
原创
发布博客 2020.11.27 ·
241 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--旋转字符串

旋转字符串 题目链接 Solution 直接模拟即可。 枚举旋转了几位,然后求出旋转后的字符串,比较是否与原字符串相同。 注意一下,如果两个字符串长度不同,无论如何旋转都不可能相同的,直接返回false。 Code class Solution { public: bool solve(string A, string B) { if (A.size() != B.size()) return false; int n = A.size(); for
原创
发布博客 2020.11.27 ·
221 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--字符串变形

字符串变形 题目链接 Solution 将字符串按单词反转,并反转大小写。 从后往前扫,如果遇到空格,说明从这个空格的位置到下一个空格之间是一个单词。 然后将单词的每个字母依次取出,取出的过程变化大小写。 Code class Transform { public: char trans(char ch) { if ('a' <= ch && ch <= 'z') return ch - 'a' + 'A'; else return ch
原创
发布博客 2020.11.27 ·
316 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面 题目链接 Solution 让奇数排在偶数前面。当然可以暴力的扫一遍,将奇数偶数分开然后组合合并。 但是algorithm库中的sort函数支持自定义排序函数,即让奇数偶数作为权值排序。 即用数字模2作为大小排序。 使用方式详见代码,代码较为简单易懂。 Code class Solution { public: static bool cmp(int a,int b){ return (a % 2) > (b % 2); }
原创
发布博客 2020.11.27 ·
107 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--数字在升序数组中出现的次数

数字在升序数组中出现的次数 题目链接 Solution 暴力。 询问一个数出现的次数,扫一遍数组,如果当前数和这个数相等,答案+1。 没有什么太难的地方,详见代码,代码比较简单易懂。 当然因为数组是升序的,可以二分出第一个大于这个数的位置和第一个小于这个数的位置,然后做差得到答案,但是数据范围较小,可以直接O(n)O(n)O(n)复杂度过。 Code class Solution { public: int GetNumberOfK(vector<int> data ,int k) {
原创
发布博客 2020.11.27 ·
101 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--旋转数组

旋转数组 题目链接 Solution 模拟。 新建一个vector,先加入后面n-m个元素,然后加入前面m个元素即可。 代码实现较为简单,需要注意下m如果大于n的情况,需要让m模n。 Code class Solution { public: vector<int> solve(int n, int m, vector<int>& a) { vector<int> ans; m %= n; for (int
原创
发布博客 2020.11.26 ·
111 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--最长公共前缀

最长公共前缀 题目链接 Solution 求n个串的最长公共前缀。 从0开始枚举答案,然后依次比较所有字符串的这一位,如果都相同,那么答案+1。 注意一下答案最大是最小的字符串的长度。 数据范围较小,暴力可过。 Code class Solution { public: string longestCommonPrefix(vector<string>& strs) { string ans; if (strs.empty()) return an
原创
发布博客 2020.11.26 ·
129 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--换钱的最少货币数

换钱的最少货币数 题目链接 Solution 问n种货币凑成一个面额所需要的最少货币数。 动态规划。 dpidp_idpi​表示凑成面额i的需要的最少货币数。 然后枚举每个面额的货币,更新dp数组即可。 dp[i]=min(dp[i],dp[i−a[j]])dp[i] = min(dp[i], dp[i - a[j]])dp[i]=min(dp[i],dp[i−a[j]]) Code class Solution { public: int minMoney(vector<int>&am
原创
发布博客 2020.11.26 ·
153 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--连续子数组的最大和

连续子数组的最大和 题目链接 Solution 最大子段和问题,可以使用动态规划解决此问题。 设dp[i]dp[i]dp[i]表示以i结束的子段的最大子段和。 所以到i时有两种选择,和前面的最大子段结合,自己构成一个新的子段。 得到转移方程dpi=max{dpi−1+arrayi,arrayi}dp_i = max\{dp_{i - 1} + array_i, array_i\}dpi​=max{dpi−1​+arrayi​,arrayi​} Code class Solution { public:
原创
发布博客 2020.11.26 ·
133 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

牛客题霸--求路径

求路径 题目链接 Solution 从左上角走到右下角,只能向右走或者向下走,求方案数。 这是一个经典的问题。 问题转化为走n+m-2次,其中向右走m-1次,向下走n-1次。 也就是类似“右右下右下下…”的序列有多少个。 所以方案数就是在n+m-2个位置中选择m-1个位置是右,剩下的是下。 所以答案就是Cn+m−2m−1C_{n + m - 2} ^ {m - 1}Cn+m−2m−1​或者Cn+m−2n−1C_{n +m - 2} ^ {n - 1}Cn+m−2n−1​。 Code class Solut
原创
发布博客 2020.11.26 ·
180 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多