本文介绍: 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改模拟面试专属HR对接将为你解锁。每期人数维持在20人内,保证能够最大限度地满足到每一个同学需求,达到和1v1同样的学习效果!,为了从小到大依次输出所有元素需要在所有元素输入完毕之后,将哈希集合。,即相同数字只保留一个,把其余相同的数去掉然后再把这些数。即可,而且要按照从小到大顺序输出全部整数,即依次输出之间随机整数接下来每行一个输入随机数字,共。

题目描述示例

题目描述

明明生成N1500 之间随机整数。请你删去其中重复数字,即相同数字只保留一个,把其余相同的数去掉然后再把这些数从小到大排序,按照排好的顺序输出

数据范围1 ≤ N ≤ 1000输入数字大小 val 满足 1 ≤ val ≤ 500

输入描述

第一行输入随机整数的个数 N接下来N每行输入一个整数,代表明明生成随机数

输出描述

输出多行表示输入数据处理后的结果

示例 1

输入

3
2
2
1

输出

1
2

说明

输入解释第一个数字3,也即这个样例N = 3说明计算机生成31500 之间随机整数,接下来每行一个输入随机数字,共 3 行,也即这 3随机数字为:2 2 1

输出解释2 2 1中,出现重复2,只需要输出一个2即可,而且要按照从小到大的顺序输出全部整数,即依次输出1 2

解题思路

这道题直接运用哈希集合包含重复元素的性质,将每一个整数都加入哈希集合num_set中。

由于哈希集合是一种无序数据结构,为了从小到大依次输出所有元素需要在所有元素输入完毕之后,将哈希集合num_set转化为列表num_lst。对列表num_lst可以进行排序了,排序完成后,在一个for循环内依次输出num_lst中的所有元素即可

代码

Python

# 题目:2023Q1A-明明的随机数
# 分值:100
# 作者:闭着眼睛学数理化
# 算法哈希集合
# 代码有看不懂的地方请直接在群上提问

N = int(input())

# 初始化一个哈希集合num_set用于储存所有不重复元素
num_set = set()

# 遍历N次,依次输入数字
for _ in range(N):
    num_set.add(int(input()))

# 哈希集合是无序数据结构,所以要将哈希集合转化为列表后再排序
num_lst = list(num_set)
# 对列表进行排序
num_lst.sort()

# 遍历num_lst中的所有元素,按照从小到大的顺序依次输出
for num in num_lst:
    print(num)

Java

import java.util.HashSet;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int N = scanner.nextInt();
        HashSet<Integer&gt; num_set = new HashSet<&gt;();
        
        for (int i = 0; i < N; i++) {
            num_set.add(scanner.nextInt());
        }
        
        ArrayList<Integer&gt; num_lst = new ArrayList<&gt;(num_set);
        Collections.sort(num_lst);
        
        for (int num : num_lst) {
            System.out.println(num);
        }
    }
}

C++

#include <iostream&gt;
#include <unordered_set&gt;
#include <vector>
#include <algorithm>

int main() {
    int N;
    std::cin >> N;
    
    std::unordered_set<int> num_set;
    
    for (int i = 0; i < N; i++) {
        int num;
        std::cin >> num;
        num_set.insert(num);
    }
    
    std::vector<int> num_lst(num_set.begin(), num_set.end());
    std::sort(num_lst.begin(), num_lst.end());
    
    for (int num : num_lst) {
        std::cout << num << std::endl;
    }
    
    return 0;
}

时空复杂度

时间复杂度O(NlogN)。排序所需的时间复杂度

空间复杂度O(N)。哈希集合所占的额外空间


华为OD算法/大厂面试高频算法练习冲刺训练

原文地址:https://blog.csdn.net/weixin_48157259/article/details/134772537

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_35346.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注