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;

}

};

相关推荐
代码游侠1 分钟前
学习笔记——线程
linux·运维·开发语言·笔记·学习·算法
又是忙碌的一天9 分钟前
八大排序之:冒泡排序、快速排序和堆排序
数据结构·算法·排序算法
一直都在57227 分钟前
数据结构入门:哈希表和树结构
数据结构·算法·散列表
宵时待雨27 分钟前
C语言笔记归纳19:动态内存管理
java·开发语言·算法
喇一渡渡31 分钟前
Java力扣---滑动窗口(2)
算法·leetcode·职场和发展
智驱力人工智能34 分钟前
山区搜救无人机人员检测算法 技术攻坚与生命救援的融合演进 城市高空无人机人群密度分析 多模态融合无人机识别系统
人工智能·深度学习·算法·架构·无人机·边缘计算
郝学胜-神的一滴1 小时前
OpenGL中的glDrawArrays函数详解:从基础到实践
开发语言·c++·程序人生·算法·游戏程序·图形渲染
_OP_CHEN1 小时前
【算法基础篇】(三十四)图论基础深度解析:从概念到代码,玩转图的存储与遍历
算法·蓝桥杯·图论·dfs·bfs·算法竞赛·acm/icpc
王璐WL1 小时前
【数据结构】栈和队列及相关算法题
数据结构·算法
麒qiqi1 小时前
Linux 线程(POSIX)核心教程
linux·算法