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,
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP