leetcode217 Contains Duplicate(JavaScript)

来源:互联网 发布:matlab数组倒序 编辑:程序博客网 时间:2024/06/05 07:17

问题

题目地址:leetcode217
leetcode217

翻译:
给定一个整数数组,找出其中有无至少出现两次的数,有,返回true,没有,返回false。
举例:
输入:[1,2,3]
输出:false
输入:[1,2,4,1]
输出:true

方法1

直接上最暴躁的逐个比较,每出现一个值x,直接在数组中向后寻找是否有等于x的值。

/**  * @param {number[]} nums  * @return {boolean}  brute*/  var containsDuplicate = function(nums) {      var flag=false;      for(var i=0;i<nums.length;i++)          for(var j=i+1;j<nums.length;j++)          {              if(nums[i]===nums[j])              {                  flag=true;                  break;              }          }          return flag;  };  

时间复杂度是O(n*n),一直不太明白

方法2

既然是数组,自然可以先排序,再判断。

/**  * @param {number[]} nums  * @return {boolean} */  var containsDuplicate = function(nums) {      var arr=[];      var flag=false;          arr=nums.sort();  //此处并没有真正排序,但是对于判断有没有相同的数而言已经足够了          for(var i=0;i<nums.length;i++)          {              if(nums[i]===nums[i+1])              {                  flag=true;                  break;              }          }          return flag;  }; 

JavaScript的sort()函数的本质是快速排序,所以这里是O(n*logn)。

方法3

仿照之前leetcode 1类似hashmap的方法,做一个类似的处理。

/**  * @param {number[]} nums  * @return {boolean}  */  var containsDuplicate = function(nums) {      var map=[];      var flag=false;      for(var i=0;i<nums.length;i++)      {          if(map[nums[i]]!==undefined)          {              flag=true;              break;          }          map[nums[i]]=i;      }       return flag;  }; 

应该是O(n)的解法了,但在实际运行时间上并没有什么进步,和上一个方法差距很小。

0 0
原创粉丝点击