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;

}

};

相关推荐
dazzle9 分钟前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
那个村的李富贵11 分钟前
智能炼金术:CANN加速的新材料AI设计系统
人工智能·算法·aigc·cann
张张努力变强32 分钟前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
万岳科技系统开发33 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
张登杰踩38 分钟前
MCR ALS 多元曲线分辨算法详解
算法
YuTaoShao1 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法
波波0071 小时前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
风暴之零1 小时前
变点检测算法PELT
算法
深鱼~1 小时前
视觉算法性能翻倍:ops-cv经典算子的昇腾适配指南
算法·cann
李斯啦果1 小时前
【PTA】L1-019 谁先倒
数据结构·算法