mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-08-06 18:24:23 +08:00
3.3 KiB
3.3 KiB
135. 获取连通的相邻节点列表
本题是一个 “阅读理解”题,其实题目的算法很简单,但理解题意很费劲。
题目描述中的【提示信息】 是我后加上去了,华为笔试的时候没有这个 【提示信息】。
相信没有 【提示信息】大家理解题意 平均要多用半个小时。
思路:
- 将第一行数据加入set中
- 后面输出数据,判断是否在 set里
- 最后把结果排个序
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_set>
using namespace std;
int main() {
unordered_set<int> uset;
int n, a;
cin >> n;
while (n--) {
cin >> a;
uset.insert(a);
}
int m, x, vlan_id;
long long tb;
vector<long long> vecTB;
cin >> m;
while(m--) {
cin >> tb;
cin >> x;
vector<long long> vecVlan_id(x);
for (int i = 0; i < x; i++) {
cin >> vecVlan_id[i];
}
for (int i = 0; i < x; i++) {
if (uset.find(vecVlan_id[i]) != uset.end()) {
vecTB.push_back(tb);
break;
}
}
}
cout << vecTB.size() << endl;
if (vecTB.size() != 0) {
sort(vecTB.begin(), vecTB.end());
for (int i = 0; i < vecTB.size() ; i++) cout << vecTB[i] << " ";
}
}
其他语言版本
Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Set<Integer> uset = new HashSet<>();
int n = scanner.nextInt();
while (n-- > 0) {
int a = scanner.nextInt();
uset.add(a);
}
int m = scanner.nextInt();
List<Long> vecTB = new ArrayList<>();
while (m-- > 0) {
long tb = scanner.nextLong();
int x = scanner.nextInt();
List<Integer> vecVlan_id = new ArrayList<>();
for (int i = 0; i < x; i++) {
vecVlan_id.add(scanner.nextInt());
}
for (int vlanId : vecVlan_id) {
if (uset.contains(vlanId)) {
vecTB.add(tb);
break;
}
}
}
System.out.println(vecTB.size());
if (!vecTB.isEmpty()) {
Collections.sort(vecTB);
for (long tb : vecTB) {
System.out.print(tb + " ");
}
}
}
}
Python
def main():
import sys
input = sys.stdin.read
data = input().split()
index = 0
n = int(data[index])
index += 1
uset = set()
for _ in range(n):
a = int(data[index])
index += 1
uset.add(a)
m = int(data[index])
index += 1
vecTB = []
while m > 0:
tb = int(data[index])
index += 1
x = int(data[index])
index += 1
vecVlan_id = []
for _ in range(x):
vecVlan_id.append(int(data[index]))
index += 1
for vlan_id in vecVlan_id:
if vlan_id in uset:
vecTB.append(tb)
break
m -= 1
print(len(vecTB))
if vecTB:
vecTB.sort()
print(" ".join(map(str, vecTB)))
if __name__ == "__main__":
main()