tree

lc1989

喵喵的双指针标记 遍历

遇1就找其dist范围内未用的0,找到就计数且0指针后移

++while(z<n && teamz!=0 || z<l)++

z++;//找到了 后移 不可重复使用

最终得最多可匹配人数

class Solution

{

//双指针,针对每个点,按照范围去找能覆盖的0的位置

//同时维持0的位置,不断右移直到满足位置

public:

int catchMaximumAmountofPeople(vector<int>& team, int dist)

{

int n=team.size();

vector<bool> vis(n);

int ret=0,z=0;//z 指针模拟0可选的位置

for(int i=0;i<n;i++)

{

if(teami==1){

int l=max(0,i-dist);

int r=min(n-1,i+dist);

++while(z<n && teamz!=0 || z<l)++

z++;

if(z<=r)

{

ret++;

++z++;//找到了 后移 不可重复使用++

}

}

}

return ret;

}

};

lc555

先把字符串换成自身或反转后的较大值

遍历每个字符串,拆分后拼接其他所有字符串,取最大拼接结果。

class Solution {

public:

string splitLoopedString(vector<string>& strs) {

int n=strs.size();

for(int i=0;i<n;i++){

string tmp{strsi.rbegin(),strsi.rend()};

if(tmp>strsi)strsi=tmp;

}

string ans="";

for(int i=0;i<n;i++){

string other="";

string str=strsi;

string rev={str.rbegin(),str.rend()};

++for(int j=i+1;j<n;j++)
other+=strsj; //之后
for(int j=0;j<i;j++)
other+=strsj; //之前
++

for(int k=0;k<str.size();k++)

{

string ++cur=str.substr(k)+other+str.substr(0,k);++

if(cur>ans)ans=cur;

}

for(int k=0;k<rev.size();k++){

string cur=rev.substr(k)+other+rev.substr(0,k);

if(cur>ans)ans=cur;

}

}

return ans;

}

};

lc3540

先算++正反向路径的前缀和,遍历查询++

按当前与前一位置的先后,取++正向直达或反向绕行的最小时间累加++,得总耗时

class Solution {

public:

typedef long long ll;

long long minTotalTime(vector<int>& forward, vector<int>& backward, vector<int>& queries) {

int len = forward.size();

vector<ll> f(2 * len), b(2 * len);

const int mod = len;

for(int i = 1; i < 2 * len; i++) {

fi = fi - 1 + forward(i - 1) % mod;

bi = bi - 1 + backward(i - 1) % mod;

}

ll ret = 0;

int pre = 0;

for(int cur : queries) {

++ret += min(fcur \> pre ? cur : cur + mod - fpre,
b(cur \< pre ? pre : pre + mod) + 1 - bcur + 1);
++

pre = cur;

}

return ret;

}

};

lc333

tiii dfs

return前 ok check sz&update

dfs 遍历树,每个节点记录子树最值和BST节点数(-1非BST)

验证当前节点为根的子树是否BST,实时更最大BST节点数

class Solution {

int ans = 0;

using T = tuple<int, int, int>;

public:

int largestBSTSubtree(TreeNode* root) {

if (!root) return 0;

dfs(root);

return ans;

}

T dfs(TreeNode* n)

{

int mn = n->val, mx = n->val;

int ls = 0, rs = 0;

bool ok = true;

if (n->left) {

auto lm, lx, lz = dfs(n->left);

if (lz == -1 || n->val <= lx) ok = false;

mn = min(mn, lm);

mx = max(mx, lx);

ls = lz;

}

if (n->right) {

auto rm, rx, rz = dfs(n->right);

if (rz == -1 || n->val >= rm) ok = false;

mn = min(mn, rm);

mx = max(mx, rx);

rs = rz;

}

int sz = ok ? (1 + ls + rs) : -1;

if (sz != -1) ans = max(ans, sz);

return {mn, mx, sz};

}

};

相关推荐
小欣加油7 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
lqqjuly7 小时前
前沿算法深度解析(二)
人工智能·算法·机器学习
徐小夕8 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
akunkuntaimei8 小时前
2026年高考数学各省真题及答案(完整版)
算法·高考
Hello:CodeWorld9 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi810 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
youngerwang11 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
KaMeidebaby12 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
手写码匠13 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力13 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试