hash滑窗|dp

lcr107

多源bfs

注意init ret -1防重复入队

++if(x>=0 && x<m && y>=0 && y<n && ret[x][y] == -1)
// 最近距离 = 相邻0的距离 + 1
ret[x][y] = ret[a][b] + 1;
++

class Solution {

typedef pair<int,int> pii;

int dx[4]={0,0,1,-1};

int dy[4]={1,-1,0,0};

public:

vector<vector<int>> updateMatrix(vector<vector<int>>& mat)

{

queue<pii> q;

int m=mat.size(),n=mat[0].size();

vector<vector<int>> ret(m,vector<int>(n,0));

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

{

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

{

if(mat[i][j]==0)

{

q.push({i,j});

}

else

{

// 标记未处理的1为-1

ret[i][j] = -1;

}

}

}

while(!q.empty())

{

auto [a,b] = q.front();

q.pop();

for(int k=0;k<4;k++)

{

int x=a+dx[k],y=b+dy[k];

++if(x>=0 && x<m && y>=0 && y<n && ret[x][y] == -1)
{
// 最近距离 = 相邻0的距离 + 1
ret[x][y] = ret[a][b] + 1;
++

q.push({x,y});

}

}

}

return ret;

}

};

lcr17

滑动窗口+两个哈希表

在s里找包含t所有字符的最短子串,找不到就返回空

class Solution {

public:

string minWindow(string s, string t) {

unordered_map<char, int> tag;

unordered_map<char, int> hash;

for (char c : t) {

tag[c]++;

}

int cnt = 0;

int tcnt = t.size();

int l = 0, r = 0;

int minLen = INT_MAX;

int start = 0;

int n = s.size();

while (r < n) {

char c = s[r];

hash[c]++;

if (hash[c] <= tag[c]) {

cnt++;

}

r++;

while (cnt == tcnt)

{

++if (r - l < minLen) {++

++minLen = r - l;++

++start = l;++

}

char leftChar = s[l];

++hash[leftChar]--;++

++if (hash[leftChar] < tag[leftChar])++

++cnt--;++

l++;

}

}

return minLen == INT_MAX ? "" : s.substr(start, minLen);

}

};

lc1186

class Solution {

public:

int maximumSum(vector<int>& arr) {

int n=arr.size();

bool flag=false;

int maxNum=INT_MIN;

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

if(arr[i]>0){

flag=true;

break;

}

maxNum=max(maxNum,arr[i]);

}

if(flag==false)return maxNum;

vector<int>pre(n+2),nex(n+2);

int add=0;

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

add+=arr[i-1];

++if(add<arr[i-1]) add=arr[i-1];++

++pre[i]=add>0?add:0;++

}

add=0;

for(int i=n;i>=1;i--){

add+=arr[i-1];

if(add<arr[i-1])add=arr[i-1];

nex[i]=add>0?add:0;

}

int ans=INT_MIN;

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

++ans=max(max(ans,pre[i-1]+nex[i+1]+arr[i-1]),pre[i-1]+nex[i+1]);++

}

return ans;

}

};

相关推荐
爱睡懒觉的焦糖玛奇朵6 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
Runawayliquor7 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
徐安安ye7 小时前
FlashAttention 为什么对序列长度这么“敏感”?
人工智能·算法
黎阳之光8 小时前
黎阳之光:以视频孪生重构智能监盘,为燃机打造新一代智慧电厂大脑
大数据·人工智能·算法·安全·数字孪生
绝知此事9 小时前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
清木!9 小时前
排序算法比较
数据结构·算法·排序算法
吴可可12310 小时前
用Teigha修改并保存CAD文件
数据库·算法·c#
灰灰勇闯IT11 小时前
ops-reduce:ReduceMax 与 ReduceMean 的并行优化
算法
水木流年追梦11 小时前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
沙威玛_LHE11 小时前
P13376题解
算法