1. K 个元素的最大和
送分题
```
class Solution {
public:
int maximizeSum(vector& nums, int k) {
int num = *max_element(nums.begin(),nums.end());
int res = 0;
while(k--!=0){
res+=num;
num++;
}
return res;
}
};
```
2. 找到两个数组的前缀公共数组
双哈希表
class Solution {
public:
vector<int> findThePrefixCommonArray(vector<int>& A, vector<int>& B) {
int n = A.size();
vector<int> C(n);
map<int,int> m1;
map<int,int> m2;
for(int i=0;i<A.size();i++){//遍历B
if(B[i]==A[i]){
C[i] = i==0?1:C[i-1]+1;//直接多一位
continue;
}
C[i] = i==0?0:C[i-1];
if(m1.count(B[i]))
C[i]++;
if(m2.count(A[i]))
C[i]++;
m1[A[i]]++;//对应值增加
m2[B[i]]++;
}
return C;
}
};
3. 网格图中鱼的最大数目
深度优先+标记
class Solution {
public:
int findMaxFish(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int res = 0;
for(int i=0;i<m;i++)
for(int j =0;j<n;j++)
if(grid[i][j]>0){
int cur = search(grid,i,j);
res = max(res,cur);
}
return res;
}
int search(vector<vector<int>>& grid,int i,int j){
if(grid[i][j]==0) return 0;//捕不到
int res = grid[i][j];//捕鱼
grid[i][j]= 0;//不再遍历
if(i<grid.size()-1&&grid[i+1][j]>0) res+=search(grid,i+1,j); //往下
if(j<grid[0].size()-1&&grid[i][j+1]>0) res+=search(grid,i,j+1); //往右
if(i>0&&grid[i-1][j]>0) res+=search(grid,i-1,j);//往上
if(j>0&&grid[i][j-1]>0) res+=search(grid,i,j-1);//往左
return res;
}
};
4. 将数组清空