- 博客(90)
- 资源 (2)
- 收藏
- 关注
原创 1072. 按列翻转得到最大值等行数
对一行而言,能翻转成相同的(同为1,或者同为0),则相等。能反转成相反的,则巧好,全部相反。可以翻转任意列,求全是1和全是0的行,最多有多少行。
2024-03-25 22:49:00 321
原创 1792. 最大平均通过率
给了每个班的人数和通过人数,给了一堆必考过的学生,分配给了不同班,让平均班的通过率最高。看分配给不同班的收益率,优先最高收益率,使用优先队列。
2024-03-12 23:46:32 285
原创 449. 序列化和反序列化二叉搜索树
使用BFS,按节点保存起来,使用-1标识空指针;没有重复节点,直接模拟就好了;虽然可以使用先序遍历+中序遍历,还原树,不过这么写简单。一棵树如果编码成string,然后解码回来。
2023-05-22 23:36:51 64
原创 1247. 交换字符使得字符串相同
统计s1中不相等时y的数量和x的数量。答案为sum(x) / 2 + sum(y) / 2 + (sum(x) 为基数 + 2)一次可以交换s1和s2中任意字符,最少交换多少次,可以让s1等于s2。如果为yy,xx这种为1次。如果为xx,yy这种为1次。如果是yx,xy这种为2次。如果x为奇数则无法匹配。
2023-05-16 00:39:25 79
原创 2389. 和有限的最长子序列
把数组由小到大排序,然后累加和(num[n] = sum(num[0]…num[n])),如果恰好大于这个和,下标就是答案。直接进行二分查找,减少查询复杂度。给二个数组,第一个数组里面的最多元素的子序列和小于第二个数组的每一个数的集合。
2023-05-15 23:26:01 58
原创 354. 俄罗斯套娃信封问题
宽重小到大排序,宽相等时从大往小排,防止同宽放多个信封。把多个信封套在一起,宽和高严格小于,问最多能几个。然后对高进行LIS(最长上升子序列)
2023-05-11 23:28:30 55
原创 1004. 最大连续1的个数 III
使用k个翻转的效果一定是大于等k-1翻转的,这里注意k不够的情况;基于此可以使用贪心的思路。题目也可以转换成允许k个0的情况下右边的下标减去左边的下标的最大值是多少?可以翻转任意k个0到1,问最长连续的1是多长?保存0的下标做查询优化。
2023-05-08 23:38:22 43
原创 剑指 Offer II 005. 单词长度的最大乘积
位运算记录字母是否出现过,然后枚举值class Solution {public: int maxProduct(vector<string>& words) { int visit[1005] = {0}; for (int i = 0; i < words.size(); i++) { for (string::iterator it = words[i].begin(); it != words[i].e
2022-02-18 00:04:31 375
原创 1330. 翻转子数组得到最大的数组值
贪心法:1. 翻转中间,则使用(最小区间最大值-最大区间最小值)*2 + 基准为数组值,这里不一定为正收益2.翻转头或者尾,则位基准重新计算翻转点基准=sum(abs(num[i] - num[i - 1])) (1<=i<nums.size())class Solution {public: int maxValueAfterReverse(vector<int>& nums) { if (nums.size() <= 1.
2022-02-17 23:52:02 305
原创 583. 两个字符串的删除操作
问题等于len(s1)+len(s2) - len(最长子串)*2直接求最长公共子序列class Solution {public: int minDistance(string word1, string word2) { const size_t n = word1.size(); const size_t m = word2.size(); int visit[505][5005] = {0}; for (int i
2022-02-15 23:29:13 191
原创 1371. 每个元音包含偶数次的最长子字符串
暴力,预处理记录每个位置元音出现了多少次,然后穷举n(从size到1)正确解法,记录元音是否出现偶次,可用状态压缩到位,然后出现了相同的状态是即满足要求,记录状态第一次出现的位置。class Solution {public: char index[256]; int visit[500005][5]; void init_index() { memset(index, -1, sizeof(char) * 256); index['a']
2022-02-14 23:09:11 317
原创 386. 字典序排数
字典序特点:先比对首位,在比对第二位,依次类推。所以第一位先填1,在判断下一位是否大于n,如果小于就递归。class Solution {public: void solve(vector<int> &ans, const int n, int now) { if (now <= n) ans.push_back(now); for (int i = 0; i < 10; ++i) {
2022-02-14 22:00:56 178
原创 1038. 把二叉搜索树转换为累加树
当前节点下1.如果有右子树,则先递归右子树。得出右子树累加和。当前节点为和加最大值。2.如果无右子树,则当前值为原树值+MAX(左子树和,父节点值)。3.如果左子树,则递归左子树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), lef
2021-07-14 00:02:25 69
原创 剑指 Offer 13. 机器人的运动范围
bfsclass Solution {public: bool judge(int x, int y, int k) { int tmp = 0; while (x > 0) { tmp += x % 10; x /= 10; } while (y > 0) { tmp += y % 10; y /= 10;
2021-06-02 21:18:06 79
原创 1382. 将二叉搜索树变平衡
通过先序遍历得到有序数组,然后重建。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void tree2
2021-05-17 22:51:52 72
原创 745. 前缀和后缀搜索
预处理所有的情况,然后查找class WordFilter {public: unordered_map<string, unordered_map<string, int>> visit; WordFilter(vector<string>& words) { for (int n = 0; n < words.size(); ++n) { const auto &index = wo
2021-04-28 23:11:25 91
原创 477. 汉明距离总和
二进制每一位分开计算,当前位有n个1,则有size-n个0,则不一样个数为n*(size-n)。class Solution {public: int totalHammingDistance(vector<int>& nums) { int visit[32] = {0}; for (auto &index:nums) { for (int i = 0; i < 32; i++)
2021-04-28 22:05:12 61
原创 494. 目标和
初始化 dp[0][x] = dp[0][x] = 1 (x为num[0])转移方程为dp[n][m] = dp[n - 1][m + num[n - 1]] + dp[n - 1][m - num[n - 1]] (n为1~nums.size() - 1, m为-1000~1000)可以使用滚动数组优化空间。class Solution {public: void exchage(int num, int count, int &a, int &b) {
2021-04-27 23:51:52 51
原创 831. 隐藏个人信息
题目链接:https://leetcode-cn.com/problems/masking-personal-information/解题思路:硬处理class Solution {public: string maskPII(string S) { auto index = S.find("@"); std::string ans; if (index != std::string::npos) { ans =
2021-04-23 00:11:46 107
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人