class Solution {
public:
int deleteGreatestValue(vector<vector<int>>& grid) {
int m=grid.size();
int res=0;
for(int j=0;j<m;j++){
int row_max=0;
for(int i=0;i<m;i++){
auto rm=max_element(grid[i].begin(),grid[i].end());
if(*rm>row_max){
row_max=*rm;
}
*rm=0;
}
res+=row_max;
}
return res;
}
};
题目https://leetcode.cn/problems/delete-greatest-value-in-each-row/
思路:找每一行的最大值,找到row-max为所有的行的最大值,然后每一行最大值改为0,为什么输出错误(不用排序做,我会那种方法)
int deleteGreatestValue(vector<vector<int>>& grid) {
int res = 0;
int m = grid.size();
for (int i = 0; i < m; i++) {
int row_max = 0;
for (int j = 0; j < m; j++) {
auto rm = max_element(grid[j].begin(), grid[j].end());
if (*rm > row_max) {
row_max = *rm;
}
}
for (int j = 0; j < m; j++) {
auto rm = max_element(grid[j].begin(), grid[j].end());
if (*rm == row_max) {
*rm = 0;
break;
}
}
res += row_max;
}
return res;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,我们来看一下你的代码,找出其中的问题。
class Solution {
public:
int deleteGreatestValue(vector<vector<int>>& grid) {
int m = grid.size(); // 获取行数
int res = 0;
for(int j=0;j<m;j++){ // 遍历行
int row_max = 0;
for(int i=0;i<m;i++){ // 遍历列
auto rm = max_element(grid[i].begin(),grid[i].end()); // 找到当前行的最大值
if(*rm>row_max){ // 如果当前行的最大值大于当前行的最大值
row_max=*rm; // 更新当前行的最大值
}
*rm=0; // 将当前行的最大值改为0
}
res+=row_max; // 将当前行的最大值加到结果中
}
return res; // 返回结果
}
};
根据问题描述,我们需要删除每一行中的最大值,然后计算被删除的最大值之和。你的代码的问题在于,在内层循环中,你通过auto rm = max_element(grid[i].begin(),grid[i].end())
找到当前行的最大值,然后将其置为0。但是,这会影响到后续的max_element
函数的结果,导致错误的输出。
下面是一个改进的解决方案,用于删除每一行中的最大值:
class Solution {
public:
int deleteGreatestValue(vector<vector<int>>& grid) {
int m = grid.size(); // 获取行数
int n = grid[0].size(); // 获取列数
int res = 0;
for (int i = 0; i < m; i++) { // 遍历每一行
int row_max = grid[i][0]; // 设置当前行的最大值为第一个元素
for (int j = 1; j < n; j++) { // 遍历每一列
if (grid[i][j] > row_max) { // 如果当前元素大于当前行的最大值
res += row_max; // 将当前行的最大值加到结果中
row_max = grid[i][j]; // 更新当前行的最大值
} else {
res += grid[i][j]; // 否则,将当前元素加到结果中
}
}
res += row_max; // 将当前行的最大值加到结果中
}
return res; // 返回结果
}
};
这个改进的解决方案通过遍历每一行和每一列,找到当前行的最大值并计算结果。与你的代码不同的是,我使用了一个额外的变量row_max
来保存当前行的最大值,并在遍历列的过程中进行更新。通过这种方式,我们可以确保不修改原始的grid
数组,避免了影响到后续的计算结果。
你可以将这个解决方案尝试用于解决问题。如果还有其他问题,或者需要进一步帮助,请随时和我说。