摘要:
股票交易的最大收益 题目链接 Solution 已经知道每一天股票的价格,可以无限次交易,每天只能进行一次,询问最大收益。 这类问题可以动态规划解决。 设$f[i]$表示到第i天的时候,最大收益是多少。 首先$f[i]$可以直接从上一天继承过来,即$f[i] = f[i - 1]$。 其次,如果在第 阅读全文
摘要:
调整数组顺序使奇数位于偶数前面 题目链接 Solution 让奇数排在偶数前面。当然可以暴力的扫一遍,将奇数偶数分开然后组合合并。 但是algorithm库中的sort函数支持自定义排序函数,即让奇数偶数作为权值排序。 即用数字模2作为大小排序。 使用方式详见代码,代码较为简单易懂。 Code cl 阅读全文
摘要:
字符串变形 题目链接 Solution 将字符串按单词反转,并反转大小写。 从后往前扫,如果遇到空格,说明从这个空格的位置到下一个空格之间是一个单词。 然后将单词的每个字母依次取出,取出的过程变化大小写。 Code class Transform { public: char trans(char 阅读全文
摘要:
旋转字符串 题目链接 Solution 直接模拟即可。 枚举旋转了几位,然后求出旋转后的字符串,比较是否与原字符串相同。 注意一下,如果两个字符串长度不同,无论如何旋转都不可能相同的,直接返回false。 Code class Solution { public: bool solve(string 阅读全文
摘要:
连续子数组的最大和 题目链接 Solution 最大子段和问题,可以使用动态规划解决此问题。 设$dp[i]$表示以i结束的子段的最大子段和。 所以到i时有两种选择,和前面的最大子段结合,自己构成一个新的子段。 得到转移方程$dp_i = max{dp_{i - 1} + array_i, arra 阅读全文
摘要:
换钱的最少货币数 题目链接 Solution 问n种货币凑成一个面额所需要的最少货币数。 动态规划。 $dp_i$表示凑成面额i的需要的最少货币数。 然后枚举每个面额的货币,更新dp数组即可。 \(dp[i] = min(dp[i], dp[i - a[j]])\) Code class Solut 阅读全文
摘要:
最长公共前缀 题目链接 Solution 求n个串的最长公共前缀。 从0开始枚举答案,然后依次比较所有字符串的这一位,如果都相同,那么答案+1。 注意一下答案最大是最小的字符串的长度。 数据范围较小,暴力可过。 Code class Solution { public: string longest 阅读全文
摘要:
旋转数组 题目链接 Solution 模拟。 新建一个vector,先加入后面n-m个元素,然后加入前面m个元素即可。 代码实现较为简单,需要注意下m如果大于n的情况,需要让m模n。 Code class Solution { public: vector<int> solve(int n, int 阅读全文
摘要:
数字在升序数组中出现的次数 题目链接 Solution 暴力。 询问一个数出现的次数,扫一遍数组,如果当前数和这个数相等,答案+1。 没有什么太难的地方,详见代码,代码比较简单易懂。 当然因为数组是升序的,可以二分出第一个大于这个数的位置和第一个小于这个数的位置,然后做差得到答案,但是数据范围较小, 阅读全文
摘要:
反转数字 题目链接 Solution 将一个数字反转,思路比较简单,可以考虑分成两步。 首先将数字拆分成0-9,存下。 将拆分后的数字从后往前组合起来,即可实现反转操作。 Code class Solution { public: int reverse(int x) { int ans = 0, 阅读全文