题解 | #序列中整数去重#

有序序列判断

http://www.nowcoder.com/practice/22e87f8a8d764a6582710f38d1b40c6e

#include<stdio.h> 
int main() {
    int n, i, j, flag = 1;//输出标签,当flag=1时才输出
    scanf("%d", &n);
    int a[1000
    for (i = 0; i < n; i++) 
    {
        scanf("%d", &a[i]);
        for (j = 0; j < i; j++) //(j=0;j<n;j++0)感觉这样才对啊,前面那种写法,最后一个数字都没比较?但我们这里是一种新的比较方式,有点难想多调试
        {
            if (a[i] == a[j]) 
            {
                flag = 0;//输入的数字和前面的数字进行比较看是否重叠
                break;
            }
        }
        if (flag)//flag=1时进行输出
            printf("%d ", a[i]);
        flag = 1;
    }
    return 0;

}

其实作为小白的我,开始不是这样写的, 我是用大多人的传统思维,即定义一个数组来存我们输入的整数序列,然后进行去重,首先第一轮比较找到第一个整数,依次和它后面的元素进行比较,找到重复的把它赋值为非我们输入的元素,如0。之后进行第二轮比较,找到第二个元素,第二个元素再和它后面的元素进行去重比较.........,之后一个for循环进行限制输出即可。之后我看到其他用户提交的这个代码,看了很久不是很了解,之后调试下终于明白了,在此简单的分析下思路:
其实就是通过循环,外层循环控制输入的新数字,内层控制比较,从第一个元素开始比较,你每输入的一个新数字要和你前面的数比较,不重复才通过条件flag=1输出,只要前面有一次重复,就跳出比较,开始输入第二新个数字。多多调试下就知道。

全部评论
为什么不用哈希表
点赞 回复 分享
发布于 2022-11-27 11:09 四川

相关推荐

不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务