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; } }

浙公网安备 33010602011771号