跳转至

LeetCode: 217. 存在重复元素

1、题目描述

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 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

2、解题思路

2.1 异或

​ 还记得前面求解众数的题目,使用了异或的思想,这里也可以使用,如果异或以后,与前一个值相等,表示找到了相等的值

​ 这个使用了双重循环,很慢

bool containsDuplicate(int *nums, int numsSize) {


    for (int i = 0; i < numsSize; i++) {
        for (int j = i + 1; j < numsSize; j++) {
            if ((nums[i] ^ nums[j] )== 0) {
                return true;
            }
        }
    }
    return false;
}

2.2 排序法

​ 先排序,在查找一遍

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

bool containsDuplicate(int *nums, int numsSize) {
    if (!nums || numsSize <= 1) {
        return false;
    }

    qsort(nums, numsSize, sizeof(int), compare);

    for (int i = 0; i < numsSize - 1; i++) {
        if(nums[i] == nums[i+1]){
            return true;
        }
    }
    return false;

}

2.3 哈希表法

​ 将数字放到哈希表中,每个数字判断一次,如果存在,表示

2.4 去重长度比较

​ 这个用python实现,非常简单

class Solution:
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        return len(nums) != len(set(nums))

​ 只有一句话,但是效率不算很高,但是比起双重循环好多了