21xrx.com
2024-12-22 15:58:49 Sunday
登录
文章检索 我的文章 写文章
C++嵌套循环的应用技巧
2023-07-11 11:32:18 深夜i     --     --
C++ 嵌套循环 应用技巧 循环嵌套优化 嵌套循环常见错误

C++作为一种高级编程语言,嵌套循环是其常用的控制流语句之一,它能够灵活高效地完成一些需要多重遍历的问题。以下将介绍C++嵌套循环的应用技巧。

1. 解决二维数组遍历问题

在C++中,二维数组通常需要使用嵌套循环进行遍历。例如,以下代码求一个二维数组arr的总和:


int sum = 0;

for (int i = 0; i < n; i++) {

  for (int j = 0; j < m; j++) {

    sum += arr[i][j];

  }

}

其中,n和m分别代表数组的行数和列数,arr[i][j]表示数组中第i行第j列的元素。通过两层嵌套循环,我们可以逐一遍历数组的每个元素,并对其进行操作。

2. 创建类似于杨辉三角的图形

杨辉三角是一个有趣的图形,它由一系列数字排列组合而成,每个数字是由其上方两个数字之和得出。通过嵌套循环,我们可以用C++打印出类似于杨辉三角的图形。


int numRows = 5;

vector<vector<int>> res(numRows);

for (int i = 0; i < numRows; i++) {

  res[i].resize(i + 1);

  res[i][0] = res[i][i] = 1;

  for (int j = 1; j < i; j++) {

    res[i][j] = res[i - 1][j - 1] + res[i - 1][j];

  }

}

for (int i = 0; i < numRows; i++) {

  for (int j = 0; j <= i; j++) {

    cout << res[i][j] << " ";

  }

  cout << endl;

}

在以上代码中,我们使用了vector来存储杨辉三角中的每个元素,通过不断改变其值得到最终的图形。内层循环通过当前行的上一行计算出每个元素的值,外层循环则负责控制行数和输出。

3. 寻找矩形面积最大的子矩阵

在矩阵运算中,我们常常需要寻找一个矩阵中面积最大的子矩阵。通过嵌套循环,可以实现对所有子矩阵的遍历,找到面积最大者。


int getMaxArea(vector<vector<int>> &matrix) {

  int numRows = matrix.size(), numCols = matrix[0].size();

  vector<int> height(numCols);

  int res = 0;

  for (int i = 0; i < numRows; i++) {

    for (int j = 0; j < numCols; j++) {

      if (matrix[i][j] == 0) {

        height[j] = 0;

      } else {

        height[j]++;

      }

    }

    res = max(res, largestRectangleArea(height));

  }

  return res;

}

int largestRectangleArea(vector<int>& heights) {

  int n = heights.size(), res = 0;

  vector<int> left(n), right(n, n);

  stack<int> s;

  for (int i = 0; i < n; i++) {

    while (!s.empty() && heights[s.top()] >= heights[i]) {

      right[s.top()] = i;

      s.pop();

    }

    left[i] = s.empty() ? -1 : s.top();

    s.push(i);

  }

  for (int i = 0; i < n; i++) {

    res = max(res, heights[i] * (right[i] - left[i] - 1));

  }

  return res;

}

我们在以上代码中使用了一个高级算法——单调栈来求出一个数组中最大的连续子数组。在外层循环中,我们逐一遍历矩阵中的每一行,并在内层循环中运用单调栈对每一列构成的子矩阵进行求解。

通过以上这些技巧,我们可以更加高效地运用C++嵌套循环来解决各种问题。希望这些方法可以对大家有所帮助!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复