C++程序:查找不同行程中我们所乘坐的有轨电车线路


假设我们有一个包含n个子列表L的嵌套列表。有轨电车轨道上有几个站点。其中我们只看到了n个站点。L[i]包含另一个列表,L[i]列表的大小决定了该站点上的有轨电车线路数量。L[i]列表的值是线路编号,并且它们可以以任意顺序排列。我们必须找到我们可能乘坐的有轨电车的线路有哪些?

问题类别

编程中的各种问题可以通过不同的技术来解决。为了解决一个问题,我们首先必须设计一个算法,为此我们必须详细研究特定问题。如果同一个问题反复出现,则可以使用递归方法;或者,我们也可以使用迭代结构。if-else和switch case等控制语句可用于控制程序中的逻辑流程。有效地使用变量和数据结构可以提供更简单的解决方案以及轻量级、低内存需求的程序。我们必须查看现有的编程技术,例如分治法、贪心算法、动态规划,并找出它们是否可以。

因此,如果我们问题的输入类似于L = [[1, 4, 6], [1, 4], [10, 5, 6, 4, 1]],则输出将为[1, 4]

步骤

为了解决这个问题,我们将遵循以下步骤 -

Define an array cnt of size: 101 and fill with 0
n := size of L
for initialize i := 1, when i <= n, update (increase i by 1), do:
   r := size of L[i - 1]
   for initialize j := 1, when j <= r, update (increase j by 1), do:
      x := L[i - 1, j - 1]
      (increase cnt[x] by 1)
for initialize i := 0, when i < 100, update (increase i by 1), do:
   if cnt[i] is same as n, then:
      print i

示例

让我们看看以下实现以更好地理解 -

#include <bits/stdc++.h>
using namespace std;
void solve(vector<vector<int>> L){
   int n, x, r, cnt[101] = { 0 };
   n = L.size();
   for (int i = 1; i <= n; i++){
      r = L[i - 1].size();
      for (int j = 1; j <= r; j++){
         x = L[i - 1][j - 1];
         cnt[x]++;
      }
   }
   for (int i = 0; i < 100; i++){
      if (cnt[i] == n){
         cout << i << ", ";
      }
   }
}
int main(){
   vector<vector<int>> L = { { 1, 4, 6 }, { 1, 4 }, { 10, 5, 6, 4, 1 } };
   solve(L);
}

输入

{ { 1, 4, 6 }, { 1, 4 }, { 10, 5, 6, 4, 1 } }

输出

1, 4,

更新于: 2022年4月7日

215 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告