[LeetCode] Contains Duplicate,leetcodeduplicate
Contains Duplicate
Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.
解題思路:
1、雜湊法。用一個set記錄所有已經出現過的數字,若出現衝突,則包含重複元素,若不衝突,則不包含重複元素。此方法的時間複雜度為O(n),空間複雜度為O(n)
class Solution {public: bool containsDuplicate(vector<int>& nums) { set<int> s; int len=nums.size(); for(int i=0; i<len; i++){ if(s.find(nums[i])==s.end()){ s.insert(nums[i]); }else{ return true; } } return false; }};2、排序法。現將數組排序,然後掃描一次數組,若出現相鄰的兩個數相同,則包含重複元素,否則沒有。此方法時間複雜度為O(nlogn),空間複雜度為O(1)【取決於排序方法】,不過用leetcode跑出來比1方法要快些,因為1方法建立set需要花費一些時間,也有測試案例的問題。
class Solution {public: bool containsDuplicate(vector<int>& nums) { std::sort(nums.begin(), nums.end()); int len=nums.size(); for(int i=1; i<len; i++){ if(nums[i-1]==nums[i]){ return true; } } return false; }};