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,
广告