每日一题---存在重复元素(1)和(2)

本文介绍了如何用C语言中的qsort函数和结构体解决数组中存在重复元素的问题,包括基础的查找重复数组方法和处理近似重复元素的思路,提供了示例代码供学习者参考。
摘要由CSDN通过智能技术生成


在这里插入图片描述

大家学习完了数组,指针等内容可以进行刷题了,刷题不仅可以增加大家的代码量,也可以积累自己的经验,言归正传,下面我们讲解这两道题。
存在重复数组
存在重复数组||


一、存在重复数组

1,1.题目展示

在这里插入图片描述

1.2.解题思路

方法颇多,仅供参考:
大家看到这道题,可能会觉得比较简单,意思就是一个数组如果有个数字出现的次数超过了2次,甚至更多,那便是True;如果所有的数字只出现了一次,那么就是False。
那么先排序,然后判断这个数字跟自己后一个数字是否一样,如果是则返回True,如果遍历了一遍,没有的话,返回False。

1.3.参考代码

我使用的排序是C语言stdlib.h库中自带的qsort函数,其底层逻辑是快速排序,如果想了解qsort函数,大家可以看指针–五,或者查询官方文件cpluscplus官方文件https://legacy.cplusplus.com/reference/clibrary/

int cmp(int* a,const int* b)
{
    return *a-*b;
}

bool containsDuplicate(int* nums, int numsSize) {
    qsort(nums,numsSize,sizeof(int),cmp);
    for(int i=0;i<numsSize-1;i++)
    {
        if(nums[i]==nums[i+1])
            return true;
    }
    return false;
}

二、存在重复元素||

2.1.题目展示

在这里插入图片描述

2.2.解题思路

这个题看完,也会觉得思路不难,只是比上一道题难点。
满足要求:两个值一样,并且这个数所在的数组下标的差值需要小于K(指定的值)。
那么首先还是老套路,进行排序,然后,在这个题中数组的下标和值使用结构体,进行分开,然后在列出是否满足要求,满足则返回True,不满足返回False。

2.3.参考代码

typedef struct
{
    int val;
    int index;
}Lax;
int cmp(const void*a,const void*b)
{
    return (*(Lax*)a).val-(*(Lax*)b).val;
}
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
    if(numsSize<=1)
        return false;
    Lax arr[numsSize];
    int i=0;
    for(i=0;i<numsSize;i++)
    {
        arr[i].val=nums[i];
        arr[i].index=i;
    }
    qsort(arr,numsSize,sizeof(Lax),cmp);
    for(i=1;i<numsSize;i++)
    {
        if(arr[i].val==arr[i-1].val)
            if(abs(arr[i].index-arr[i-1].index)<=k)
                return true;
    }
    return false;
}

这个代码所说运行效率不高,但是代码的可读性挺高的,适合初学者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值