# 6031. 找出数组中的所有 K 近邻下标

## 题意

1 < = n u m s . l e n g t h < = 1000

## 代码

class Solution {
public:
vector<int> findKDistantIndices(vector<int>& nums, int key, int k) {
vector<int>ans;
map<int,int>mp;
int n=nums.size();
for(int i=0;i<nums.size();i++){
for(int j=max(0,i-k);j<=min(n-1,i+k);j++){
if(abs(i-j)<=k&&nums[j]==key){
ans.push_back(i);break;
}
}
}
return ans;
}
};

# 5203. 统计可以提取的工件

## 代码

class Solution {
public:
int digArtifacts(int n, vector<vector<int>>& artifacts, vector<vector<int>>& dig) {
int arti_siz=artifacts.size();
int dig_siz=dig.size();
map<pair<int,int>,int>mp;
for(auto it:dig){
pair<int,int>t={it[0],it[1]};
mp[t]=1;
}
int ans=0;
for(auto it:artifacts){
int x1=it[0],y1=it[1],x2=it[2],y2=it[3];
bool ff=1;
for(int i=x1;i<=x2&&ff;i++){
for(int j=y1;j<=y2&&ff;j++){
pair<int,int>t={i,j};
if(mp.find(t)==mp.end()){
ff=0;
}
}
}
if(ff) ans++;
}
return ans;
}
};

# 5227. K 次操作后最大化顶端元素

## 题意

1<=nums.length<=105

## 代码

class Solution {
public:
int maximumTop(vector<int>& nums, int k) {
int n=nums.size();
if(n==1){
if(k%2) return -1;
else return nums[0];
}
int ans=-1;
//[99,95,68,24,18] 69 =>99
for(int i=0;i<min(n,k+1);i++){
if(i!=k-1) ans=max(ans,nums[i]);
}
return ans;
}
};

# 6032. 得到要求路径的最小带权子图

## 代码

class Solution {
public:
vector<long long> bfs( vector<vector<pair<int,int>>>g,int s){
int n=g.size();
vector<long long>dis(n,1e18);
vector<bool>st(n,false);
dis[s]=0;
st[s]=true;
queue<int>q;
q.push(s);
while(!q.empty()){
int t=q.front();q.pop();
st[t]=false;
for(auto it:g[t]){
int nex=it.first,w=it.second;
if(dis[nex]>dis[t]+w){
dis[nex]=dis[t]+w;
if(!st[nex]){
q.push(nex);st[nex]=true;
}
}
}
}
return dis;
}
long long minimumWeight(int n, vector<vector<int>>& edges, int src1, int src2, int dest) {
vector<vector<pair<int,int>>>g1(n);
vector<vector<pair<int,int>>>g2(n);//反图
for(auto it:edges){
int from=it[0],to=it[1],w=it[2];
g1[from].push_back({to,w});
g2[to].push_back({from,w});
}
vector<long long> dis1=bfs(g1,src1);
vector<long long> dis2=bfs(g1,src2);
vector<long long> dis3=bfs(g2,dest);
long long ans=1e18;
for(int i=0;i<n;i++) ans=min(ans,dis1[i]+dis2[i]+dis3[i]);
if(ans==1e18) ans=-1;
return ans;
}
};

|
17小时前
|

【C++】类和对象（下）
【C++】类和对象（下）
4 0
|
17小时前
|

【C++】类和对象（中）（2）
【C++】类和对象（中）（2）
7 0
|
17小时前
|

【C++】类和对象（中）（1）
【C++】类和对象（中）（1）
9 0
|
21小时前
|

C++ 存储类
C++ 存储类
7 0
|
1天前
|

6 0
|
1天前
|

4 0
|
1天前
|

6 0
|
1天前
|

6 0
|
1天前
|
C语言 C++

4 0
|
1天前
|
Java 编译器 C语言

6 0