LeetCode:217.存在重复元素(C)

题目:
给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

示例:
示例 1:
输入: [1,2,3,1]
输出: true

示例 2:
输入: [1,2,3,4]
输出: false

示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

解题思路:

  1. 首先将数组中的所有元素进行排序;
  2. 从前向后遍历,如果遇到两个相邻元素相等则说明存在重复元素,直接跳出循环;否则说明不存在重复元素。

代码:

int comp(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;      //递增排序
}

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

}

总结:

  1. 不能简单的使用哈希映射(将数组元素映射到数组的对应位置), 因为数组元素可能存在负数,这时会出错。例:[1,5,-2,-4,0];

2.直接将每个元素和数组中其他元素进行比较是否相等,会超出时间限制。

补充:C中快速排序函数qsort():
qsort(buf, n, sizeof(int), cmp) :

  1. 第一个参数buf为待排序数组首地址;

2.第二个参数n为数组长度;

  1. 第三个参数sizeof(int)为数组元素所占字节;

4.第四个参数cmp为所调用函数的指针,函数名即是函数的指针,调用函数来确定排序的方式。
各种数据类型的升序排序函数

参考:https://blog.csdn.net/z944733142/article/details/80292613

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。