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};

}

};

相关推荐
YH55269848 分钟前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
遥感知识服务2 小时前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
晚风醉蝶2 小时前
1-13-TimSort
算法
ZJU_统一阿萨姆2 小时前
【算子开发】算子融合与Softmax_LayerNorm实现
人工智能·算法·语言模型·硬件架构
叩码以求索4 小时前
浅谈:前序遍历反转法求解N叉树的后序遍历
算法
北风toto5 小时前
中缀、前缀、后缀表达式
算法·软件设计师
听取WA声一片(无恶意)5 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先
码流怪侠6 小时前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github
hold?fish:palm6 小时前
30 两两交换链表中的节点
数据结构·算法·链表
Nil2086 小时前
leetcode 98验证二叉搜索树
算法·leetcode·职场和发展