p82 数组中是否包含重复元素(leetcode 217)

一:解题思路

首先很容易想到的一种方法是,暴力破解法,用2层循环去除数组中所有的数字对,然后进行一一比较,这种的时间复杂度为O(n^2)太高了,就不写它的代码了。

方法一:先对数组进行排序,然后从数组下标为1的开始,与前一个进行对比,直到遍历完数组。Time:(O(n*log(n))),Space:O(1)

方法二:用一个集合set,如果发现集合中有重复的元素,这返回true。

二:完整代码示例 (C++版和Java版)

方法一C++:

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) 
    {
        if (nums.size() == 0) return false;
        sort(nums.begin(),nums.end());
        for (int i = 1; i < nums.size(); i++)
        {
            if (nums[i] == nums[i - 1])
                return true;
        }

        return false;
    }
};

方法一Java:

class Solution {
        public boolean containsDuplicate(int[] nums) 
        {
               if(nums==null || nums.length==0) return false;
               Arrays.sort(nums);
               for(int i=1;i<nums.length;i++)
               {
                   if(nums[i]==nums[i-1])
                       return true;
               }
               
               return false;
        }
    }

方法二C++:

class Solution {
public:
    bool containsDuplicate(vector<int>& nums)
    {
        if (nums.size() == 0) return false;

        set<int> s;
        for (int i = 0; i < nums.size(); i++)
        {
            if (s.count(nums[i]) != 0) return true;
            s.insert(nums[i]);
        }

        return false;
    }
};

方法二Java:

class Solution {
        public boolean containsDuplicate(int[] nums)
        {
            if(nums==null || nums.length==0) return false;
            Set<Integer> s=new HashSet<>();
            for(int num:nums)
            {
                if(s.contains(num)) return true;
                s.add(num);
            }

            return false;
        }
    }

 

posted @ 2020-04-04 17:44  repinkply  阅读(158)  评论(0)    收藏  举报