算法-存在重複元素

給定一個整數數組,判斷是否存在重複元素。html

若是存在一值在數組中出現至少兩次,函數返回 true 。若是數組中每一個元素都不相同,則返回 false 。數組

 

示例 1:網絡

輸入: [1,2,3,1]
輸出: true
示例 2:函數

輸入: [1,2,3,4]
輸出: falsespa

方法1code

新建一個數組,在放數以前判斷新數組中是否存在元素,從而判斷原數組中是否有重複元素htm

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    var arr=[];
    for(var i=0;i<nums.length;i++){
        if(arr.indexOf(nums[i])==-1){
            arr.push(nums[i])
        }else{
          break;
        }
    }
    return !(arr.length==nums.length)
};

方法2對象

先排序,近似大小鍀挨在一塊兒,再對比相鄰鍀兩個數是都相等,從而判斷是否重複blog

複雜度分析排序

時間複雜度:O(N\log N)O(NlogN),其中 NN 爲數組的長度。須要對數組進行排序。

空間複雜度:O(\log N)O(logN),其中 NN 爲數組的長度。注意咱們在這裏應當考慮遞歸調用棧的深度。

var containsDuplicate = function(nums) {
  var arr= nums.sort();
  var flag=false
   for(var i=0;i<arr.length;i++){
       if(arr[i]==arr[i+1]){
           flag=true
           break;
       }
   }
   return flag
};

方法3 

利用對象的屬性不重複,將數組的每一項看成對象的屬性名,併爲屬性名賦值,當再次出現該屬性名,則return true;

var containsDuplicate = function(nums) {
 var obj={};
 for(var i=0;i<nums.length;i++){
     if(obj[nums[i]]==true){
         return true;
     }
     obj[nums[i]]=true;
 }
 return false
};

方法4

對於數組中每一個元素,咱們將它插入到哈希表中。若是插入一個元素時發現該元素已經存在於哈希表中,則說明存在重複的元素

複雜度分析

  • 時間複雜度:O(N)O(N),其中 NN 爲數組的長度。

  • 空間複雜度:O(N)O(N),其中 NN 爲數組的長度

var containsDuplicate = function(nums) {
    const set = new Set();
    for (const x of nums) {
        if (set.has(x)) {
            return true;
        }
        set.add(x);
    }
    return false;
};

  

 

 

來源:力扣(LeetCode)連接:https://leetcode-cn.com/problems/contains-duplicate著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索