我是靠谱客的博主 认真皮卡丘,最近开发中收集的这篇文章主要介绍刷题(牛客网)HJ3 随机数去重排序解题思路:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:随机输入n个数,去重,并按从小到大的顺序输出。

输入:n 以及 n个数字m,n:[1,1000] ,m:[1,500]

输出:去重且排序后的数字串

限制:时间复杂度 O(n)

解题语言:C语言

解题思路:

        解决题目的核心是如何快速找到输入的数字是否重复,1)在已知输入的值得范围的情况下,所有可能输入的数可以映射为数组索引,当某一数值 m 输入过之后,将数组m索引下的值置1,之后再输入相同的数时,即可做过滤处理,从而达到去重的效果。2)遍历数组,打印出数组中值为1的索引,即可完成排序。

解题后的心得:

        利用哈希算法可以O(n)的时间内完成去重

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define VALID_FLAG      (1)
#define INVALID_FLAG    (0)
#define HASH_LIST_LEN   (501)

int main(int argc, char *argv[])
{
    int i           = 0;
    int inputCount  = 0;
    int inputNum    = 0;
    int hash[HASH_LIST_LEN] = {0};

    while (scanf("%d", &inputCount) != EOF)
    {
        for (i = 0; i < inputCount; i++)
        {
            scanf("%d", &inputNum);
            hash[inputNum] = VALID_FLAG;
        }

        for (i = 0; i < HASH_LIST_LEN; i++)
        {
            if (VALID_FLAG == hash[i])
            {
                printf("%d ", i);
            }
        }
        printf("n");
        memset(hash, 0, sizeof(hash));
    }
    
    return 0;
}

最后

以上就是认真皮卡丘为你收集整理的刷题(牛客网)HJ3 随机数去重排序解题思路:的全部内容,希望文章能够帮你解决刷题(牛客网)HJ3 随机数去重排序解题思路:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部