Files
leetcode-master/problems/kamacoder/0135.获取连通的相邻节点列表.md
programmercarl 2c32229383 Update
2024-07-15 16:49:16 +08:00

3.3 KiB

135. 获取连通的相邻节点列表

本题是一个 “阅读理解”题,其实题目的算法很简单,但理解题意很费劲。

题目描述中的【提示信息】 是我后加上去了,华为笔试的时候没有这个 【提示信息】。

相信没有 【提示信息】大家理解题意 平均要多用半个小时。

思路:

  1. 将第一行数据加入set中
  2. 后面输出数据,判断是否在 set里
  3. 最后把结果排个序
#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()