2023 微众银行笔试题 0913

笔试时间:2023年9月13日 秋招

第一题

题目:挑选

小丽有一串有n个珠子的漂亮手链,其上的珠子颜色(用整数代表)从左到右分别为a1 a2...an。小丽觉得其中反复出现相同颜色混杂其中是不美观的。小丽想将其中重复颜色的珠子去一下重,只保留最右边的那一颗,其余珠子相对位置保持不变。因为珠子实在太多了,请你帮帮小丽。

输入描述

第一行1个整数n,表示珠子数量。

第二行n个整数a1 a2...an,表示珠子颜色。

对于100%的数据,1<=n<=50000,1<=ai<=n

输出描述

输出一行若干个整数表示去重后的珠子颜色。

样例输入

8

1 2 1 3 4 2 4 4

样例输出

1 3 2 4

说明

第1颗珠子因为第3颗珠子是相同额色而被去除

第2颗珠子因为第6颗珠子是相同颜色而被去除

第5颗珠子因为第8颗珠子是相同颜色而被去除

第7颗珠子因为第8颗珠子是相同额色而被去除

参考题解

一个set、一个list,从后往前遍历,查询set,如果不存在,则放进set,反之放进list。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <unordered_set>

std::vector<int> findUniqueElements(int numbers[], int n) {
    std::vector<int> uniqueList;
    std::unordered_set<int> uniqueSet;
    
    for (int i = n - 1; i >= 0; i--) {
        int currentNumber = numbers[i];
        
        if (uniqueSet.find(currentNumber) == uniqueSet.end()) {
            uniqueList.push_back(currentNumber);
            uniqueSet.insert(currentNumber);
        }
    }
    
    return uniqueList;
}

int main() {
    int n;
    std::cin >> n;
    int numbers[n];
    
    for (int i = 0; i < n; i++) {
        std::cin >> numbers[i];
    }
    
    std::vector<int> uniqueList = findUniqueElements(numbers, n);
    
    for (int i = uniqueList.size() - 1; i >= 0; i--) {
        std::cout << uniqueList[i] << " ";
    }
    
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.*;

class UniqueElements {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] numbers = new int[n];

        // Read input numbers
        for (int i = 0; i < n; i++) {
            numbers[i] = scanner.nextInt();
        }

        List<Integer> uniqueList = findUniqueElements(numbers);

        // Print unique elements in reverse order
        for (int i = uniqueList.size() - 1; i >= 0; i--) {
            System.out.print(uniqueList.get(i) + " ");
        }
    }

    public static List<Integer> findUniqueElements(int[] numbers) {
        List<Integer> uniqueList = new ArrayList<>();
        Set<Integer> uniqueSet = new HashSet<>();

        // Iterate through the array in reverse order
        for (int i = numbers.length - 1; i >= 0; i--) {
            int currentNumber = numbers[i];

            if (!uniqueSet.contains(currentNumber)) {
                uniqueList.add(currentNumber);
                uniqueSet.add(currentNumber);
            }
        }

        return uniqueList;
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

def find_unique_elements(numbers):
    unique_list = []
    unique_set = set()

    for number in reversed(numbers):
        if number not in unique_set:
            unique_list.append(number)
            unique_set.add(number)

    return unique_list


def main():
    n = int(input())
    numbers = list(map(int, input().split()))

    unique_list = find_unique_elements(numbers)

    for number in reversed(unique_list):
        print(number, end=" ")


if __name__ == "__main__":
    main()

第二题

题目:随机播放器

喜欢听歌的小明觉得系统的随机播放总是不能让他满

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

1 2 评论
分享
牛客网
牛客企业服务